summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/lib/oeqa/utils/qemurunner.py11
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