[oe-commits] Paul Eggleton : oeqa/utils/qemurunner: fix error handling if runqemu exits with an error

git at git.openembedded.org git at git.openembedded.org
Mon Jul 27 22:29:49 UTC 2015


Module: openembedded-core.git
Branch: master
Commit: 1789b89de6c4642464abadd9f8a4746385e6b4a7
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=1789b89de6c4642464abadd9f8a4746385e6b4a7

Author: Paul Eggleton <paul.eggleton at linux.intel.com>
Date:   Mon Jul 27 14:04:00 2015 +0100

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 <paul.eggleton at linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 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 11186d6..71da21c 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)



More information about the Openembedded-commits mailing list