From 1789b89de6c4642464abadd9f8a4746385e6b4a7 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Mon, 27 Jul 2015 14:04:00 +0100 Subject: 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 --- meta/lib/oeqa/utils/qemurunner.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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) -- cgit 1.2.3-korg