mirror of
https://git.yoctoproject.org/poky
synced 2026-04-29 00:32:14 +02:00
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. (From OE-Core rev: 2f5cbfee0ab1189fbb83f0e785d79c8d123fccc2) Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
778fc612cb
commit
315fb4c9e2
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user