summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/event.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2023-01-04 12:32:35 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-01-05 11:50:17 +0000
commita19687acd12497d727203e63d74b2703387f34a6 (patch)
tree813515cdfb0c807435db26acb6bafc2d351f48f1 /bitbake/lib/bb/event.py
parent2c6f0b9228b47459dd1b67d578792cd017006128 (diff)
downloadpoky-a19687acd12497d727203e63d74b2703387f34a6.tar.gz
bitbake: lib/bb: Update thread/process locks to use a timeout
The thread/process locks we use translate to futexes in Linux. If a process dies holding the lock, anything else trying to take the lock will hang indefinitely. An example would be the OOM killer taking out a parser process. To avoid bitbake processes just hanging indefinitely, add a timeout to our lock calls using a context manager. If we can't obtain the lock after waiting 5 minutes, hard exit out using os._exit(1). Use _exit() to avoid locking in any other places trying to write error messages to event handler queues (which also need locks). Whilst a bit harsh, this should mean we stop having lots of long running processes in cases where things are never going to work out and also avoids hanging builds on the autobuilder. (Bitbake rev: d2a3f662b0eed900fc012a392bfa0a365df0df9b) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r--bitbake/lib/bb/event.py6
1 files changed, 3 insertions, 3 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 7826541a64..8b05f93e2f 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -184,7 +184,7 @@ def fire_ui_handlers(event, d):
184 ui_queue.append(event) 184 ui_queue.append(event)
185 return 185 return
186 186
187 with _thread_lock: 187 with bb.utils.lock_timeout(_thread_lock):
188 errors = [] 188 errors = []
189 for h in _ui_handlers: 189 for h in _ui_handlers:
190 #print "Sending event %s" % event 190 #print "Sending event %s" % event
@@ -315,7 +315,7 @@ def set_eventfilter(func):
315 _eventfilter = func 315 _eventfilter = func
316 316
317def register_UIHhandler(handler, mainui=False): 317def register_UIHhandler(handler, mainui=False):
318 with _thread_lock: 318 with bb.utils.lock_timeout(_thread_lock):
319 bb.event._ui_handler_seq = bb.event._ui_handler_seq + 1 319 bb.event._ui_handler_seq = bb.event._ui_handler_seq + 1
320 _ui_handlers[_ui_handler_seq] = handler 320 _ui_handlers[_ui_handler_seq] = handler
321 level, debug_domains = bb.msg.constructLogOptions() 321 level, debug_domains = bb.msg.constructLogOptions()
@@ -329,7 +329,7 @@ def unregister_UIHhandler(handlerNum, mainui=False):
329 if mainui: 329 if mainui:
330 global _uiready 330 global _uiready
331 _uiready = False 331 _uiready = False
332 with _thread_lock: 332 with bb.utils.lock_timeout(_thread_lock):
333 if handlerNum in _ui_handlers: 333 if handlerNum in _ui_handlers:
334 del _ui_handlers[handlerNum] 334 del _ui_handlers[handlerNum]
335 return 335 return