diff options
Diffstat (limited to 'meta')
-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 7ae309845a..cd95d33bdc 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 |
@@ -124,7 +125,6 @@ class QemuRunner: | |||
124 | self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout)) | 125 | self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout)) |
125 | self.stop() | 126 | self.stop() |
126 | self._dump_host() | 127 | self._dump_host() |
127 | raise SystemExit | ||
128 | 128 | ||
129 | def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True): | 129 | def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True): |
130 | env = os.environ.copy() | 130 | env = os.environ.copy() |
@@ -232,6 +232,8 @@ class QemuRunner: | |||
232 | endtime = time.time() + self.runqemutime | 232 | endtime = time.time() + self.runqemutime |
233 | while not self.is_alive() and time.time() < endtime: | 233 | while not self.is_alive() and time.time() < endtime: |
234 | if self.runqemu.poll(): | 234 | if self.runqemu.poll(): |
235 | if self.runqemu_exited: | ||
236 | return False | ||
235 | if self.runqemu.returncode: | 237 | if self.runqemu.returncode: |
236 | # No point waiting any longer | 238 | # No point waiting any longer |
237 | self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode) | 239 | self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode) |
@@ -241,6 +243,9 @@ class QemuRunner: | |||
241 | return False | 243 | return False |
242 | time.sleep(0.5) | 244 | time.sleep(0.5) |
243 | 245 | ||
246 | if self.runqemu_exited: | ||
247 | return False | ||
248 | |||
244 | if not self.is_alive(): | 249 | if not self.is_alive(): |
245 | self.logger.error("Qemu pid didn't appear in %s seconds (%s)" % | 250 | self.logger.error("Qemu pid didn't appear in %s seconds (%s)" % |
246 | (self.runqemutime, time.strftime("%D %H:%M:%S"))) | 251 | (self.runqemutime, time.strftime("%D %H:%M:%S"))) |
@@ -416,7 +421,7 @@ class QemuRunner: | |||
416 | os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL) | 421 | os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL) |
417 | self.runqemu.stdin.close() | 422 | self.runqemu.stdin.close() |
418 | self.runqemu.stdout.close() | 423 | self.runqemu.stdout.close() |
419 | self.runqemu = None | 424 | self.runqemu_exited = True |
420 | 425 | ||
421 | if hasattr(self, 'server_socket') and self.server_socket: | 426 | if hasattr(self, 'server_socket') and self.server_socket: |
422 | self.server_socket.close() | 427 | self.server_socket.close() |
@@ -457,7 +462,7 @@ class QemuRunner: | |||
457 | return False | 462 | return False |
458 | 463 | ||
459 | def is_alive(self): | 464 | def is_alive(self): |
460 | if not self.runqemu or self.runqemu.poll() is not None: | 465 | if not self.runqemu or self.runqemu.poll() is not None or self.runqemu_exited: |
461 | return False | 466 | return False |
462 | if os.path.isfile(self.qemu_pidfile): | 467 | if os.path.isfile(self.qemu_pidfile): |
463 | # when handling pidfile, qemu creates the file, stat it, lock it and then write to it | 468 | # when handling pidfile, qemu creates the file, stat it, lock it and then write to it |