From: Richard Purdie Date: Mon, 3 Mar 2025 13:13:31 +0000 (+0000) Subject: qemurunner: Fix a bug with fork/exit handling X-Git-Tag: yocto-5.2~355 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=652e40bfae24b8e23bbf7a7f35d900d2ab8d0f92;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git qemurunner: Fix a bug with fork/exit handling If you send this forked process a SIGTERM, it will execute all of the parent's exit code leading to two sets of console/exit output which is extremely confusing. Wrap the code in a try/finally to ensure we always call os._exit() to avoid this. I spent far too long trying to work out the crazy console output from this. Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 04e03349140..c4db0cf038b 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -267,12 +267,15 @@ class QemuRunner: self.monitorpipe = os.fdopen(w, "w") else: # child process - os.setpgrp() - os.close(w) - r = os.fdopen(r) - x = r.read() - os.killpg(os.getpgid(self.runqemu.pid), signal.SIGTERM) - os._exit(0) + try: + os.setpgrp() + os.close(w) + r = os.fdopen(r) + x = r.read() + os.killpg(os.getpgid(self.runqemu.pid), signal.SIGTERM) + finally: + # We must exit under all circumstances + os._exit(0) self.logger.debug("runqemu started, pid is %s" % self.runqemu.pid) self.logger.debug("waiting at most %d seconds for qemu pid (%s)" %