diff mbox series

qemurunner: more cleanups for output blocking

Message ID 20231220161450.1422484-1-alex.bennee@linaro.org
State Accepted, archived
Commit 5e58737c66090fe009ec49296f3e7d687eb05766
Headers show
Series qemurunner: more cleanups for output blocking | expand

Commit Message

Alex Bennée Dec. 20, 2023, 4:14 p.m. UTC
If we are only tracking stdout and are not using self.readsock we end
up throwing an exception blocking further action from the thread. Fix
this by checking self.readsock is not None first.

While we are at it split even into fd, event to make things clearer
and handle the fail path of stringify_event by echoing the hex value
of the unknown flag.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Mikko Rapeli <mikko.rapeli@linaro.org>
Cc: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/lib/oeqa/utils/qemurunner.py | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index 4a2246733f..7273bbc3db 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -785,19 +785,20 @@  class LoggingThread(threading.Thread):
         self.logger.debug("Starting thread event loop")
         while not breakout:
             events = poll.poll(2)
-            for event in events:
+            for fd, event in events:
+
                 # An error occurred, bail out
-                if event[1] & self.errorevents:
-                    raise Exception(self.stringify_event(event[1]))
+                if event & self.errorevents:
+                    raise Exception(self.stringify_event(event))
 
                 # Event to stop the thread
-                if self.readpipe == event[0]:
+                if self.readpipe == fd:
                     self.logger.debug("Stop event received")
                     breakout = True
                     break
 
                 # A connection request was received
-                elif self.serversock and self.serversock.fileno() == event[0]:
+                elif self.serversock and self.serversock.fileno() == fd:
                     self.logger.debug("Connection request received")
                     self.readsock, _ = self.serversock.accept()
                     self.readsock.setblocking(0)
@@ -808,14 +809,14 @@  class LoggingThread(threading.Thread):
                     self.connection_established.set()
 
                 # Actual data to be logged
-                elif self.readsock.fileno() == event[0]:
+                elif self.readsock and self.readsock.fileno() == fd:
                     data = self.recv(1024, self.readsock)
                     self.logfunc(data)
-                elif self.qemuoutput.fileno() == event[0]:
+                elif self.qemuoutput.fileno() == fd:
                     data = self.qemuoutput.read()
                     self.logger.debug("Data received on qemu stdout %s" % data)
                     self.logfunc(data, ".stdout")
-                elif self.serialsock and self.serialsock.fileno() == event[0]:
+                elif self.serialsock and self.serialsock.fileno() == fd:
                     if self.serial_lock.acquire(blocking=False):
                         data = self.recv(1024, self.serialsock)
                         self.logger.debug("Data received serial thread %s" % data.decode('utf-8', 'replace'))
@@ -864,6 +865,9 @@  class LoggingThread(threading.Thread):
             val = 'POLLHUP'
         elif select.POLLNVAL == event:
             val = 'POLLNVAL'
+        else:
+            val = "0x%x" % (event)
+
         return val
 
     def close_socket(self, sock):