diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2017-03-24 22:46:16 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-27 08:15:06 +0100 |
commit | 58e6e7c2043d7f4b48ec3b4b9daf25f5766fa5d2 (patch) | |
tree | 292df67088c5a987b3b046670cda5c807d0ffd0b /meta/lib/oeqa/utils/qemutinyrunner.py | |
parent | 1e3f04f86aac7f547b10c187f82983fa3137be55 (diff) | |
download | poky-58e6e7c2043d7f4b48ec3b4b9daf25f5766fa5d2.tar.gz |
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.
(From OE-Core rev: accf0362f964cc9d6330b6e52e83d748d890521f)
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')
-rw-r--r-- | meta/lib/oeqa/utils/qemutinyrunner.py | 8 |
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): | |||
107 | 107 | ||
108 | return self.is_alive() | 108 | return self.is_alive() |
109 | 109 | ||
110 | def run_serial(self, command): | 110 | def run_serial(self, command, timeout=5): |
111 | self.server_socket.sendall(command+'\n') | 111 | self.server_socket.sendall(command+'\n') |
112 | data = '' | 112 | data = '' |
113 | status = 0 | 113 | status = 0 |
114 | stopread = False | 114 | stopread = False |
115 | endtime = time.time()+5 | 115 | endtime = time.time()+timeout |
116 | while time.time()<endtime and not stopread: | 116 | while time.time()<endtime and not stopread: |
117 | sread, _, _ = select.select([self.server_socket],[],[],5) | 117 | sread, _, _ = select.select([self.server_socket],[],[],1) |
118 | for sock in sread: | 118 | for sock in sread: |
119 | answer = sock.recv(1024) | 119 | answer = sock.recv(1024) |
120 | if answer: | 120 | if answer: |
@@ -124,6 +124,8 @@ class QemuTinyRunner(QemuRunner): | |||
124 | stopread = True | 124 | stopread = True |
125 | if not data: | 125 | if not data: |
126 | status = 1 | 126 | status = 1 |
127 | if not stopread: | ||
128 | data += "<<< run_serial(): command timed out after %d seconds without output >>>\r\n\r\n" % timeout | ||
127 | return (status, str(data)) | 129 | return (status, str(data)) |
128 | 130 | ||
129 | def find_child(self,parent_pid): | 131 | def find_child(self,parent_pid): |