mirror of
https://git.yoctoproject.org/poky
synced 2026-02-13 20:23:04 +01:00
oeqa/qemurunner: do not use Popen.poll() when terminating runqemu with a signal
This does not actually guarantee that the child runqemu process has completely exited: poll() may return prematurely while the SIGTERM handler in runqemu is still running. This thwarts the rest of the processing, and may terminate the handler before it completes. Use Popen.communicate() instead: this is what python documentation recommends as well: https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate (From OE-Core rev: 3793662bcfdab230d7b98bde2bc6757949b0aca0) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit cd3e55606c427287f37585c5d7cde936471e52f4) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
c3fb76fc72
commit
59bfcd7299
@@ -432,10 +432,13 @@ class QemuRunner:
|
||||
except OSError as e:
|
||||
if e.errno != errno.ESRCH:
|
||||
raise
|
||||
endtime = time.time() + self.runqemutime
|
||||
while self.runqemu.poll() is None and time.time() < endtime:
|
||||
time.sleep(1)
|
||||
if self.runqemu.poll() is None:
|
||||
try:
|
||||
outs, errs = self.runqemu.communicate(timeout = self.runqemutime)
|
||||
if outs:
|
||||
self.logger.info("Output from runqemu:\n%s", outs.decode("utf-8"))
|
||||
if errs:
|
||||
self.logger.info("Stderr from runqemu:\n%s", errs.decode("utf-8"))
|
||||
except TimeoutExpired:
|
||||
self.logger.debug("Sending SIGKILL to runqemu")
|
||||
os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL)
|
||||
if not self.runqemu.stdout.closed:
|
||||
|
||||
Reference in New Issue
Block a user