diff options
| -rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 02ac89c142..9bb1f4bb2d 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
| @@ -94,12 +94,19 @@ class QemuRunner: | |||
| 94 | if qemuparams: | 94 | if qemuparams: |
| 95 | self.qemuparams = self.qemuparams[:-1] + " " + qemuparams + " " + '\"' | 95 | self.qemuparams = self.qemuparams[:-1] + " " + qemuparams + " " + '\"' |
| 96 | 96 | ||
| 97 | def getOutput(o): | ||
| 98 | import fcntl | ||
| 99 | fl = fcntl.fcntl(o, fcntl.F_GETFL) | ||
| 100 | fcntl.fcntl(o, fcntl.F_SETFL, fl | os.O_NONBLOCK) | ||
| 101 | return os.read(o.fileno(), 1000000) | ||
| 102 | |||
| 97 | launch_cmd = 'runqemu %s %s %s' % (self.machine, self.rootfs, self.qemuparams) | 103 | launch_cmd = 'runqemu %s %s %s' % (self.machine, self.rootfs, self.qemuparams) |
| 98 | # FIXME: We pass in stdin=subprocess.PIPE here to work around stty | 104 | # FIXME: We pass in stdin=subprocess.PIPE here to work around stty |
| 99 | # blocking at the end of the runqemu script when using this within | 105 | # blocking at the end of the runqemu script when using this within |
| 100 | # oe-selftest (this makes stty error out immediately). There ought | 106 | # oe-selftest (this makes stty error out immediately). There ought |
| 101 | # to be a proper fix but this will suffice for now. | 107 | # to be a proper fix but this will suffice for now. |
| 102 | self.runqemu = subprocess.Popen(launch_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, preexec_fn=os.setpgrp) | 108 | self.runqemu = subprocess.Popen(launch_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, preexec_fn=os.setpgrp) |
| 109 | output = self.runqemu.stdout | ||
| 103 | 110 | ||
| 104 | logger.info("runqemu started, pid is %s" % self.runqemu.pid) | 111 | logger.info("runqemu started, pid is %s" % self.runqemu.pid) |
| 105 | logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime) | 112 | logger.info("waiting at most %s seconds for qemu pid" % self.runqemutime) |
| @@ -109,9 +116,8 @@ class QemuRunner: | |||
| 109 | if self.runqemu.returncode: | 116 | if self.runqemu.returncode: |
| 110 | # No point waiting any longer | 117 | # No point waiting any longer |
| 111 | logger.info('runqemu exited with code %d' % self.runqemu.returncode) | 118 | logger.info('runqemu exited with code %d' % self.runqemu.returncode) |
| 112 | output = self.runqemu.stdout | ||
| 113 | self.stop() | 119 | self.stop() |
| 114 | logger.info("Output from runqemu:\n%s" % output.read()) | 120 | logger.info("Output from runqemu:\n%s" % getOutput(output)) |
| 115 | return False | 121 | return False |
| 116 | time.sleep(1) | 122 | time.sleep(1) |
| 117 | 123 | ||
| @@ -128,7 +134,7 @@ class QemuRunner: | |||
| 128 | self.ip = ips[0] | 134 | self.ip = ips[0] |
| 129 | self.server_ip = ips[1] | 135 | self.server_ip = ips[1] |
| 130 | except IndexError, ValueError: | 136 | except IndexError, ValueError: |
| 131 | logger.info("Couldn't get ip from qemu process arguments! Here is the qemu command line used: %s" % cmdline) | 137 | logger.info("Couldn't get ip from qemu process arguments! Here is the qemu command line used:\n%s\nand output from runqemu:\n%s" % (cmdline, getOutput(output))) |
| 132 | self.stop() | 138 | self.stop() |
| 133 | return False | 139 | return False |
| 134 | logger.info("Target IP: %s" % self.ip) | 140 | logger.info("Target IP: %s" % self.ip) |
| @@ -170,9 +176,8 @@ class QemuRunner: | |||
| 170 | return False | 176 | return False |
| 171 | else: | 177 | else: |
| 172 | logger.info("Qemu pid didn't appeared in %s seconds" % self.runqemutime) | 178 | logger.info("Qemu pid didn't appeared in %s seconds" % self.runqemutime) |
| 173 | output = self.runqemu.stdout | ||
| 174 | self.stop() | 179 | self.stop() |
| 175 | logger.info("Output from runqemu:\n%s" % output.read()) | 180 | logger.info("Output from runqemu:\n%s" % getOutput(output)) |
| 176 | return False | 181 | return False |
| 177 | 182 | ||
| 178 | return self.is_alive() | 183 | return self.is_alive() |
