bitbake: utils: Add signal blocking for lock_timeout

We never want to exit whilst holding these locks as it deadlocks all python
threads. Add signal blocking around the lock critical part so a signal
shouldn't cause such an exit.

(Bitbake rev: 5cc1dde1ffd9382b3a9e4cc182be067defba16a7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a097755c671e2b530dea6200a94b39fa9dca246c)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
Richard Purdie 2025-03-03 11:58:57 +00:00 committed by Steve Sakoman
parent 7985134409
commit 7eea22a7cd

View File

@ -1860,6 +1860,7 @@ def path_is_descendant(descendant, ancestor):
@contextmanager
def lock_timeout(lock):
try:
s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
held = lock.acquire(timeout=5*60)
if not held:
bb.server.process.serverlog("Couldn't get the lock for 5 mins, timed out, exiting.\n%s" % traceback.format_stack())
@ -1867,3 +1868,4 @@ def lock_timeout(lock):
yield held
finally:
lock.release()
signal.pthread_sigmask(signal.SIG_SETMASK, s)