diff options
Diffstat (limited to 'meta/lib')
-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() |