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>
This commit is contained in:
parent
de83a8ab6d
commit
355e4ec0b6
|
@ -30,7 +30,7 @@ import logging
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import sre_constants
|
import sre_constants
|
||||||
import threading
|
import threading
|
||||||
from io import StringIO
|
from io import StringIO, UnsupportedOperation
|
||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from collections import defaultdict, namedtuple
|
from collections import defaultdict, namedtuple
|
||||||
|
@ -230,14 +230,17 @@ class BBCooker:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# TOSTOP must not be set or our children will hang when they output
|
# TOSTOP must not be set or our children will hang when they output
|
||||||
fd = sys.stdout.fileno()
|
try:
|
||||||
if os.isatty(fd):
|
fd = sys.stdout.fileno()
|
||||||
import termios
|
if os.isatty(fd):
|
||||||
tcattr = termios.tcgetattr(fd)
|
import termios
|
||||||
if tcattr[3] & termios.TOSTOP:
|
tcattr = termios.tcgetattr(fd)
|
||||||
buildlog.info("The terminal had the TOSTOP bit set, clearing...")
|
if tcattr[3] & termios.TOSTOP:
|
||||||
tcattr[3] = tcattr[3] & ~termios.TOSTOP
|
buildlog.info("The terminal had the TOSTOP bit set, clearing...")
|
||||||
termios.tcsetattr(fd, termios.TCSANOW, tcattr)
|
tcattr[3] = tcattr[3] & ~termios.TOSTOP
|
||||||
|
termios.tcsetattr(fd, termios.TCSANOW, tcattr)
|
||||||
|
except UnsupportedOperation:
|
||||||
|
pass
|
||||||
|
|
||||||
self.command = bb.command.Command(self)
|
self.command = bb.command.Command(self)
|
||||||
self.state = state.initial
|
self.state = state.initial
|
||||||
|
|
Loading…
Reference in New Issue