path: root/meta/lib/oeqa/utils/qemutinyrunner.py
diff options
authorPatrick Ohly <patrick.ohly@intel.com>2017-03-24 22:46:16 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-03-26 13:17:01 +0100
commitaccf0362f964cc9d6330b6e52e83d748d890521f (patch)
tree98e08d4a0956f378c35c0462e0a2aec1f29cb043 /meta/lib/oeqa/utils/qemutinyrunner.py
parent680940250c9a1c7b43229c5e4f4fed5cc3e31033 (diff)
qemurunner: configurable timeout for run_serial()
Some commands might need to run longer than the default timeout of five seconds. If that occurred, run_serial() returned with a status code of zero (sic!) and no other indication of what went wrong. Now the timeout is configurable (with five still the default) and an explicit warning ("<<< run_serial(): command timed out after 5 seconds without output >>>") gets appended at the end of the data returned to the caller. While at it, the logic for checking for the timeout was updated a bit because both implementations could overshoot the timeout when entering select() right before the final deadline. Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/utils/qemutinyrunner.py')
1 files changed, 5 insertions, 3 deletions
diff --git a/meta/lib/oeqa/utils/qemutinyrunner.py b/meta/lib/oeqa/utils/qemutinyrunner.py
index ec52473834..b1009a0a37 100644
--- a/meta/lib/oeqa/utils/qemutinyrunner.py
+++ b/meta/lib/oeqa/utils/qemutinyrunner.py
@@ -107,14 +107,14 @@ class QemuTinyRunner(QemuRunner):
return self.is_alive()
- def run_serial(self, command):
+ def run_serial(self, command, timeout=5):
data = ''
status = 0
stopread = False
- endtime = time.time()+5
+ endtime = time.time()+timeout
while time.time()<endtime and not stopread:
- sread, _, _ = select.select([self.server_socket],[],[],5)
+ sread, _, _ = select.select([self.server_socket],[],[],1)
for sock in sread:
answer = sock.recv(1024)
if answer:
@@ -124,6 +124,8 @@ class QemuTinyRunner(QemuRunner):
stopread = True
if not data:
status = 1
+ if not stopread:
+ data += "<<< run_serial(): command timed out after %d seconds without output >>>\r\n\r\n" % timeout
return (status, str(data))
def find_child(self,parent_pid):