mirror of
https://git.yoctoproject.org/poky
synced 2026-06-01 13:09:50 +00:00
oeqa/utils/qemurunner: fix error handling if runqemu exits with an error
* Don't wait for QEMU to start if it's never going to (because runqemu exited with an error) * Don't error out if killing the process fails with "no such process" (we don't care if it's already dead) (From OE-Core rev: 1789b89de6c4642464abadd9f8a4746385e6b4a7) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
7f9b42a90f
commit
a6eb5ec327
@@ -12,6 +12,7 @@ import signal
|
|||||||
import re
|
import re
|
||||||
import socket
|
import socket
|
||||||
import select
|
import select
|
||||||
|
import errno
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger("BitBake.QemuRunner")
|
logger = logging.getLogger("BitBake.QemuRunner")
|
||||||
@@ -104,6 +105,14 @@ class QemuRunner:
|
|||||||
logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime)
|
logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime)
|
||||||
endtime = time.time() + self.runqemutime
|
endtime = time.time() + self.runqemutime
|
||||||
while not self.is_alive() and time.time() < endtime:
|
while not self.is_alive() and time.time() < endtime:
|
||||||
|
if self.runqemu.poll():
|
||||||
|
if self.runqemu.returncode:
|
||||||
|
# No point waiting any longer
|
||||||
|
logger.info('runqemu exited with code %d' % self.runqemu.returncode)
|
||||||
|
output = self.runqemu.stdout
|
||||||
|
self.stop()
|
||||||
|
logger.info("Output from runqemu:\n%s" % output.read())
|
||||||
|
return False
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
if self.is_alive():
|
if self.is_alive():
|
||||||
@@ -169,7 +178,11 @@ class QemuRunner:
|
|||||||
|
|
||||||
if self.runqemu:
|
if self.runqemu:
|
||||||
logger.info("Sending SIGTERM to runqemu")
|
logger.info("Sending SIGTERM to runqemu")
|
||||||
os.killpg(self.runqemu.pid, signal.SIGTERM)
|
try:
|
||||||
|
os.killpg(self.runqemu.pid, signal.SIGTERM)
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno != errno.ESRCH:
|
||||||
|
raise
|
||||||
endtime = time.time() + self.runqemutime
|
endtime = time.time() + self.runqemutime
|
||||||
while self.runqemu.poll() is None and time.time() < endtime:
|
while self.runqemu.poll() is None and time.time() < endtime:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user