Openembedded Bitbake Development
 help / color / mirror / Atom feed
From: Joshua Lock <joshua.g.lock@linux.intel.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>,
	 bitbake-devel@lists.openembedded.org
Subject: Re: [PATCH v2] prserv/serv: Tweak stdout manipulation to be stream safe
Date: Thu, 05 Jan 2017 14:46:54 +0000	[thread overview]
Message-ID: <1483627614.7913.1.camel@linux.intel.com> (raw)
In-Reply-To: <1483624327-18607-1-git-send-email-richard.purdie@linuxfoundation.org>

On Thu, 2017-01-05 at 13:52 +0000, Richard Purdie wrote:
> We've been seeing oe-selftest failures under puzzling circumstances.
> It
> turns out if you run oe-selftest on a machine with xmlrunner
> installed
> and have the recent tinfoil2 changes, the launching of PR server
> crashes
> leading to selftest hanging if using an autoloaded PR server.
> 
> The reason is that xmlrunner uses an io.StringIO object as
> stdout/stderr
> instead of the usual io.TextIOWrapper and StringIO lacks a fileno()
> method.
> 
> We have to deal with both cases and in the python way, we try and
> then seek
> forgivness if we see an AttributeError or UnSupportedOperation
> exception.
> Unfortunately we have to deal with both cases as we may be performing
> a
> traditiional double fork() from the commandline, or a larger python
> program.
> 
> [YOCTO #10866]
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
>  lib/prserv/serv.py | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py
> index 350b085..d9b602f 100644
> --- a/lib/prserv/serv.py
> +++ b/lib/prserv/serv.py
> @@ -242,12 +242,25 @@ class PRServer(SimpleXMLRPCServer):
>  
>          sys.stdout.flush()
>          sys.stderr.flush()
> +
> +        # We could be called from a python thread with io.StringIO
> as
> +        # stdout/stderr or it could be 'real' unix fd forking where
> we need
> +        # to physically close the fds to prevent the program
> launching us from
> +        # potentially hanging on a pipe. Handle both cases.
>          si = open('/dev/null', 'r')
> +        try:
> +            os.dup2(si.fileno(),sys.stdin.fileno())
> +        except (AttributeError, io.UnsupportedOperation):
> +            sys.stdin = si
>          so = open(self.logfile, 'a+')
> -        se = so
> -        os.dup2(si.fileno(),sys.stdin.fileno())
> -        os.dup2(so.fileno(),sys.stdout.fileno())
> -        os.dup2(se.fileno(),sys.stderr.fileno())
> +        try:
> +            os.dup2(so.fileno(),sys.stdout.fileno())
> +        except (AttributeError, io.UnsupportedOperation):
> +            sys.stdout = so
> +        try:
> +            os.dup2(so.fileno(),sys.stderr.fileno())
> +        except (AttributeError, io.UnsupportedOperation):
> +            sys.stderr = so

I think there's a copy/paste error here — shouldn't the second
try/except be duplicating/assigning se not so?

Joshua

>  
>          # Clear out all log handlers prior to the fork() to avoid
> calling
>          # event handlers not part of the PRserver
> -- 
> 2.7.4
> 


  reply	other threads:[~2017-01-05 14:46 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-05 13:52 [PATCH v2] prserv/serv: Tweak stdout manipulation to be stream safe Richard Purdie
2017-01-05 14:46 ` Joshua Lock [this message]
2017-01-05 14:54   ` Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1483627614.7913.1.camel@linux.intel.com \
    --to=joshua.g.lock@linux.intel.com \
    --cc=bitbake-devel@lists.openembedded.org \
    --cc=richard.purdie@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox