diff options
-rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 7d9b36f811..4b74337652 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
@@ -36,6 +36,7 @@ class QemuRunner: | |||
36 | 36 | ||
37 | # Popen object for runqemu | 37 | # Popen object for runqemu |
38 | self.runqemu = None | 38 | self.runqemu = None |
39 | self.runqemu_exited = False | ||
39 | # pid of the qemu process that runqemu will start | 40 | # pid of the qemu process that runqemu will start |
40 | self.qemupid = None | 41 | self.qemupid = None |
41 | # target ip - from the command line or runqemu output | 42 | # target ip - from the command line or runqemu output |
@@ -125,7 +126,6 @@ class QemuRunner: | |||
125 | self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout)) | 126 | self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout)) |
126 | self.stop() | 127 | self.stop() |
127 | self._dump_host() | 128 | self._dump_host() |
128 | raise SystemExit | ||
129 | 129 | ||
130 | def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True): | 130 | def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True): |
131 | env = os.environ.copy() | 131 | env = os.environ.copy() |
@@ -235,6 +235,8 @@ class QemuRunner: | |||
235 | endtime = time.time() + self.runqemutime | 235 | endtime = time.time() + self.runqemutime |
236 | while not self.is_alive() and time.time() < endtime: | 236 | while not self.is_alive() and time.time() < endtime: |
237 | if self.runqemu.poll(): | 237 | if self.runqemu.poll(): |
238 | if self.runqemu_exited: | ||
239 | return False | ||
238 | if self.runqemu.returncode: | 240 | if self.runqemu.returncode: |
239 | # No point waiting any longer | 241 | # No point waiting any longer |
240 | self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode) | 242 | self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode) |
@@ -244,6 +246,9 @@ class QemuRunner: | |||
244 | return False | 246 | return False |
245 | time.sleep(0.5) | 247 | time.sleep(0.5) |
246 | 248 | ||
249 | if self.runqemu_exited: | ||
250 | return False | ||
251 | |||
247 | if not self.is_alive(): | 252 | if not self.is_alive(): |
248 | self.logger.error("Qemu pid didn't appear in %s seconds (%s)" % | 253 | self.logger.error("Qemu pid didn't appear in %s seconds (%s)" % |
249 | (self.runqemutime, time.strftime("%D %H:%M:%S"))) | 254 | (self.runqemutime, time.strftime("%D %H:%M:%S"))) |
@@ -419,7 +424,7 @@ class QemuRunner: | |||
419 | os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL) | 424 | os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL) |
420 | self.runqemu.stdin.close() | 425 | self.runqemu.stdin.close() |
421 | self.runqemu.stdout.close() | 426 | self.runqemu.stdout.close() |
422 | self.runqemu = None | 427 | self.runqemu_exited = True |
423 | 428 | ||
424 | if hasattr(self, 'server_socket') and self.server_socket: | 429 | if hasattr(self, 'server_socket') and self.server_socket: |
425 | self.server_socket.close() | 430 | self.server_socket.close() |
@@ -460,7 +465,7 @@ class QemuRunner: | |||
460 | return False | 465 | return False |
461 | 466 | ||
462 | def is_alive(self): | 467 | def is_alive(self): |
463 | if not self.runqemu or self.runqemu.poll() is not None: | 468 | if not self.runqemu or self.runqemu.poll() is not None or self.runqemu_exited: |
464 | return False | 469 | return False |
465 | if os.path.isfile(self.qemu_pidfile): | 470 | if os.path.isfile(self.qemu_pidfile): |
466 | # when handling pidfile, qemu creates the file, stat it, lock it and then write to it | 471 | # when handling pidfile, qemu creates the file, stat it, lock it and then write to it |