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 /bitbake/lib/bb | |
| 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>
Diffstat (limited to 'bitbake/lib/bb')
| -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 |
