[oe-commits] Randy Witt : qemurunner: In the logging thread retry on EAGAIN, EWOULDBLOCK
git at git.openembedded.org
git at git.openembedded.org
Wed Aug 26 07:29:06 UTC 2015
Module: openembedded-core.git
Branch: master
Commit: 2f5cbfee0ab1189fbb83f0e785d79c8d123fccc2
URL: http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=2f5cbfee0ab1189fbb83f0e785d79c8d123fccc2
Author: Randy Witt <randy.e.witt at linux.intel.com>
Date: Wed Aug 26 00:15:15 2015 -0700
qemurunner: In the logging thread retry on EAGAIN, EWOULDBLOCK
On a nonblocking socket an exception can be generated for the EAGAIN
and EWOULDBLOCK errnos. Since these aren't actually errors make sure to
retry rather than bailing out.
Signed-off-by: Randy Witt <randy.e.witt at linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
meta/lib/oeqa/utils/qemurunner.py | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index d079072..6d36df6 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -412,12 +412,33 @@ class LoggingThread(threading.Thread):
# Actual data to be logged
elif self.readsock.fileno() == event[0]:
- data = self.readsock.recv(1024)
- if not data:
- raise Exception("No data on read ready socket")
-
+ data = self.recv_loop()
self.logfunc(data)
+ # Since the socket is non-blocking make sure to honor EAGAIN
+ # and EWOULDBLOCK
+ def recv_loop(self):
+ while True:
+ try:
+ data = self.readsock.recv(1024)
+ break
+ except socket.error as e:
+ if e.errno == errno.EAGAIN or e.errno == errno.EWOULDBLOCK:
+ continue
+ else:
+ raise
+
+ if not data:
+ raise Exception("No data on read ready socket")
+ elif data == 0:
+ # This actually means an orderly shutdown
+ # happened. But for this code it counts as an
+ # error since the connection shouldn't go away
+ # until qemu exits.
+ raise Exception("Console connection closed unexpectedly")
+
+ return data
+
def stringify_event(self, event):
val = ''
if select.POLLERR == event:
More information about the Openembedded-commits
mailing list