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 18:09:50 +0100 |
commit | 355e4ec0b6ac20d5c66618e6df1db6064baceb57 (patch) | |
tree | 260c4d9668e774f011e240d90deb815f9ca5106d | |
parent | de83a8ab6d671dc87ec7f81ebcb868751b4d7355 (diff) | |
download | poky-355e4ec0b6ac20d5c66618e6df1db6064baceb57.tar.gz |
bitbake: 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]
(Bitbake rev: cb4f8f6efa28ef2b13bc738a0118b876baa15b3e)
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/cooker.py | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index d1ab4aa17b..b7d7a7ec21 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -30,7 +30,7 @@ import logging | |||
30 | import multiprocessing | 30 | import multiprocessing |
31 | import sre_constants | 31 | import sre_constants |
32 | import threading | 32 | import threading |
33 | from io import StringIO | 33 | from io import StringIO, UnsupportedOperation |
34 | from contextlib import closing | 34 | from contextlib import closing |
35 | from functools import wraps | 35 | from functools import wraps |
36 | from collections import defaultdict, namedtuple | 36 | from collections import defaultdict, namedtuple |
@@ -230,14 +230,17 @@ class BBCooker: | |||
230 | pass | 230 | pass |
231 | 231 | ||
232 | # TOSTOP must not be set or our children will hang when they output | 232 | # TOSTOP must not be set or our children will hang when they output |
233 | fd = sys.stdout.fileno() | 233 | try: |
234 | if os.isatty(fd): | 234 | fd = sys.stdout.fileno() |
235 | import termios | 235 | if os.isatty(fd): |
236 | tcattr = termios.tcgetattr(fd) | 236 | import termios |
237 | if tcattr[3] & termios.TOSTOP: | 237 | tcattr = termios.tcgetattr(fd) |
238 | buildlog.info("The terminal had the TOSTOP bit set, clearing...") | 238 | if tcattr[3] & termios.TOSTOP: |
239 | tcattr[3] = tcattr[3] & ~termios.TOSTOP | 239 | buildlog.info("The terminal had the TOSTOP bit set, clearing...") |
240 | termios.tcsetattr(fd, termios.TCSANOW, tcattr) | 240 | tcattr[3] = tcattr[3] & ~termios.TOSTOP |
241 | termios.tcsetattr(fd, termios.TCSANOW, tcattr) | ||
242 | except UnsupportedOperation: | ||
243 | pass | ||
241 | 244 | ||
242 | self.command = bb.command.Command(self) | 245 | self.command = bb.command.Command(self) |
243 | self.state = state.initial | 246 | self.state = state.initial |