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:
Paul Eggleton 2015-07-27 14:04:00 +01:00 committed by Richard Purdie
parent 7f9b42a90f
commit a6eb5ec327
1 changed files with 14 additions and 1 deletions

View File

@ -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)