diff options
author | Mariano Lopez <mariano.lopez@linux.intel.com> | 2016-08-23 07:06:11 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-02 16:29:36 +0100 |
commit | cb4f8f6efa28ef2b13bc738a0118b876baa15b3e (patch) | |
tree | 1e5c0183829a204eaf97ef640061cedac5b760b8 /lib/bb/cooker.py | |
parent | 8b7180332691a41a013e07a52b26018402141b6a (diff) | |
download | bitbake-contrib-cb4f8f6efa28ef2b13bc738a0118b876baa15b3e.tar.gz |
cooker.py: Catch when stdout doesn't have a file descriptor
Currently, there is a check to remove the TOSTOP attribute from
a tty to avoid hangs. It assumes that sys.stdout will have a
file descriptor and this is not always true, some IO classes
will throw exceptions when trying to get its file descriptor.
This will add a check for such cases and avoid throwing an
exception.
[YOCTO #10162]
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/cooker.py')
-rw-r--r-- | lib/bb/cooker.py | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index d1ab4aa17..b7d7a7ec2 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -30,7 +30,7 @@ import logging import multiprocessing import sre_constants import threading -from io import StringIO +from io import StringIO, UnsupportedOperation from contextlib import closing from functools import wraps from collections import defaultdict, namedtuple @@ -230,14 +230,17 @@ class BBCooker: pass # TOSTOP must not be set or our children will hang when they output - fd = sys.stdout.fileno() - if os.isatty(fd): - import termios - tcattr = termios.tcgetattr(fd) - if tcattr[3] & termios.TOSTOP: - buildlog.info("The terminal had the TOSTOP bit set, clearing...") - tcattr[3] = tcattr[3] & ~termios.TOSTOP - termios.tcsetattr(fd, termios.TCSANOW, tcattr) + try: + fd = sys.stdout.fileno() + if os.isatty(fd): + import termios + tcattr = termios.tcgetattr(fd) + if tcattr[3] & termios.TOSTOP: + buildlog.info("The terminal had the TOSTOP bit set, clearing...") + tcattr[3] = tcattr[3] & ~termios.TOSTOP + termios.tcsetattr(fd, termios.TCSANOW, tcattr) + except UnsupportedOperation: + pass self.command = bb.command.Command(self) self.state = state.initial |