From: Paul Eggleton Date: Mon, 27 Jul 2015 13:04:00 +0000 (+0100) Subject: oeqa/utils/qemurunner: fix error handling if runqemu exits with an error X-Git-Tag: 2015-10~1085 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=1789b89de6c4642464abadd9f8a4746385e6b4a7;p=openembedded-core.git 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) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 11186d6b26..71da21c779 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -12,6 +12,7 @@ import signal import re import socket import select +import errno import logging logger = logging.getLogger("BitBake.QemuRunner") @@ -104,6 +105,14 @@ class QemuRunner: logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime) endtime = time.time() + self.runqemutime 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) if self.is_alive(): @@ -169,7 +178,11 @@ class QemuRunner: if self.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 while self.runqemu.poll() is None and time.time() < endtime: time.sleep(1)