mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
bitbake: bitbake-worker: Fix silent hang issue caused by unexpected stdout content
This patch addresses an issue in bitbake-worker where stdout, reserved for status reporting, is improperly accessed by child processes. The problem occurs during the execution of parseRecipe, which calls anonymous functions. If these functions use print-like operations, they can inadvertently output data to stdout. This unexpected data can cause the runqueue to hang silently, if the stdout buffer is flushed before exec_task is executed. To prevent this, the patch redirects stdout to /dev/null and ensures it is flushed prior to the execution of exec_task. (Bitbake rev: 08f3e677d6af27a41a918aaa9da9c1c9b20a0b95) Signed-off-by: Yang Xu <yang.xu@mediatek.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -237,9 +237,11 @@ def fork_off_task(cfg, data, databuilder, workerdata, extraconfigdata, runtask):
|
|||||||
# Let SIGHUP exit as SIGTERM
|
# Let SIGHUP exit as SIGTERM
|
||||||
signal.signal(signal.SIGHUP, sigterm_handler)
|
signal.signal(signal.SIGHUP, sigterm_handler)
|
||||||
|
|
||||||
# No stdin
|
# No stdin & stdout
|
||||||
newsi = os.open(os.devnull, os.O_RDWR)
|
# stdout is used as a status report channel and must not be used by child processes.
|
||||||
os.dup2(newsi, sys.stdin.fileno())
|
dumbio = os.open(os.devnull, os.O_RDWR)
|
||||||
|
os.dup2(dumbio, sys.stdin.fileno())
|
||||||
|
os.dup2(dumbio, sys.stdout.fileno())
|
||||||
|
|
||||||
if umask is not None:
|
if umask is not None:
|
||||||
os.umask(umask)
|
os.umask(umask)
|
||||||
@@ -305,6 +307,10 @@ def fork_off_task(cfg, data, databuilder, workerdata, extraconfigdata, runtask):
|
|||||||
if not quieterrors:
|
if not quieterrors:
|
||||||
logger.critical(traceback.format_exc())
|
logger.critical(traceback.format_exc())
|
||||||
os._exit(1)
|
os._exit(1)
|
||||||
|
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if dry_run:
|
if dry_run:
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user