From 4a5ef39d8a6a18dc48f280fb52be1fc8bfac3799 Mon Sep 17 00:00:00 2001 From: Alex Bennée Date: Wed, 20 Dec 2023 16:14:50 +0000 Subject: qemurunner: more cleanups for output blocking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. (From OE-Core rev: 5e58737c66090fe009ec49296f3e7d687eb05766) Signed-off-by: Alex Bennée Cc: Mikko Rapeli Cc: Richard Purdie Signed-off-by: Richard Purdie --- meta/lib/oeqa/utils/qemurunner.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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): -- cgit v1.2.3-54-g00ecf