summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/utils/qemurunner.py
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2023-12-20 16:14:50 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-12-21 10:38:30 +0000
commit4a5ef39d8a6a18dc48f280fb52be1fc8bfac3799 (patch)
treedebda644d8edbc9721fae6d3d6fbb378f8069560 /meta/lib/oeqa/utils/qemurunner.py
parentc270131c530eb0207391203ba501e6f8af6cda21 (diff)
downloadpoky-4a5ef39d8a6a18dc48f280fb52be1fc8bfac3799.tar.gz
qemurunner: more cleanups for output blocking
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 <alex.bennee@linaro.org> Cc: Mikko Rapeli <mikko.rapeli@linaro.org> Cc: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/utils/qemurunner.py')
-rw-r--r--meta/lib/oeqa/utils/qemurunner.py20
1 files 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):
785 self.logger.debug("Starting thread event loop") 785 self.logger.debug("Starting thread event loop")
786 while not breakout: 786 while not breakout:
787 events = poll.poll(2) 787 events = poll.poll(2)
788 for event in events: 788 for fd, event in events:
789
789 # An error occurred, bail out 790 # An error occurred, bail out
790 if event[1] & self.errorevents: 791 if event & self.errorevents:
791 raise Exception(self.stringify_event(event[1])) 792 raise Exception(self.stringify_event(event))
792 793
793 # Event to stop the thread 794 # Event to stop the thread
794 if self.readpipe == event[0]: 795 if self.readpipe == fd:
795 self.logger.debug("Stop event received") 796 self.logger.debug("Stop event received")
796 breakout = True 797 breakout = True
797 break 798 break
798 799
799 # A connection request was received 800 # A connection request was received
800 elif self.serversock and self.serversock.fileno() == event[0]: 801 elif self.serversock and self.serversock.fileno() == fd:
801 self.logger.debug("Connection request received") 802 self.logger.debug("Connection request received")
802 self.readsock, _ = self.serversock.accept() 803 self.readsock, _ = self.serversock.accept()
803 self.readsock.setblocking(0) 804 self.readsock.setblocking(0)
@@ -808,14 +809,14 @@ class LoggingThread(threading.Thread):
808 self.connection_established.set() 809 self.connection_established.set()
809 810
810 # Actual data to be logged 811 # Actual data to be logged
811 elif self.readsock.fileno() == event[0]: 812 elif self.readsock and self.readsock.fileno() == fd:
812 data = self.recv(1024, self.readsock) 813 data = self.recv(1024, self.readsock)
813 self.logfunc(data) 814 self.logfunc(data)
814 elif self.qemuoutput.fileno() == event[0]: 815 elif self.qemuoutput.fileno() == fd:
815 data = self.qemuoutput.read() 816 data = self.qemuoutput.read()
816 self.logger.debug("Data received on qemu stdout %s" % data) 817 self.logger.debug("Data received on qemu stdout %s" % data)
817 self.logfunc(data, ".stdout") 818 self.logfunc(data, ".stdout")
818 elif self.serialsock and self.serialsock.fileno() == event[0]: 819 elif self.serialsock and self.serialsock.fileno() == fd:
819 if self.serial_lock.acquire(blocking=False): 820 if self.serial_lock.acquire(blocking=False):
820 data = self.recv(1024, self.serialsock) 821 data = self.recv(1024, self.serialsock)
821 self.logger.debug("Data received serial thread %s" % data.decode('utf-8', 'replace')) 822 self.logger.debug("Data received serial thread %s" % data.decode('utf-8', 'replace'))
@@ -864,6 +865,9 @@ class LoggingThread(threading.Thread):
864 val = 'POLLHUP' 865 val = 'POLLHUP'
865 elif select.POLLNVAL == event: 866 elif select.POLLNVAL == event:
866 val = 'POLLNVAL' 867 val = 'POLLNVAL'
868 else:
869 val = "0x%x" % (event)
870
867 return val 871 return val
868 872
869 def close_socket(self, sock): 873 def close_socket(self, sock):