qemurunner: Clean up serial_lock handling

Avoid "RuntimeError: release unlocked lock" since the lock shouldn't
be locked even in the error path. Add a try/finally path to ensure
this.

(From OE-Core rev: 78f86c946d37d15b044be158e22e9853009cae27)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit b0732ee009ca47580d1d2ad75334f4aa50e6efd5)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
Richard Purdie
2024-10-13 08:37:07 +01:00
committed by Steve Sakoman
parent 1a526844db
commit b0c9ca3600

View File

@@ -519,7 +519,6 @@ class QemuRunner:
except Exception as e:
self.logger.warning('Extra log data exception %s' % repr(e))
data = None
self.thread.serial_lock.release()
return False
with self.thread.serial_lock:
@@ -822,10 +821,12 @@ class LoggingThread(threading.Thread):
self.logfunc(data, ".stdout")
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'))
self.logfunc(data, ".2")
self.serial_lock.release()
try:
data = self.recv(1024, self.serialsock)
self.logger.debug("Data received serial thread %s" % data.decode('utf-8', 'replace'))
self.logfunc(data, ".2")
finally:
self.serial_lock.release()
else:
serial_registered = False
poll.unregister(self.serialsock.fileno())