summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/cooker.py
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2016-08-23 07:06:11 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-02 18:09:50 +0100
commit355e4ec0b6ac20d5c66618e6df1db6064baceb57 (patch)
tree260c4d9668e774f011e240d90deb815f9ca5106d /bitbake/lib/bb/cooker.py
parentde83a8ab6d671dc87ec7f81ebcb868751b4d7355 (diff)
downloadpoky-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/cooker.py')
-rw-r--r--bitbake/lib/bb/cooker.py21
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
30import multiprocessing 30import multiprocessing
31import sre_constants 31import sre_constants
32import threading 32import threading
33from io import StringIO 33from io import StringIO, UnsupportedOperation
34from contextlib import closing 34from contextlib import closing
35from functools import wraps 35from functools import wraps
36from collections import defaultdict, namedtuple 36from 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