summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2023-02-20 09:30:44 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-02-20 15:18:53 +0000
commit76db0baba26a5da5382f7cc44c64eb705e24e638 (patch)
tree74a7ea9f5ac3578414398036522572b026bafbe5 /bitbake/lib/bb
parent7244bf24573252fde6506da8a3f883e6c416d5ad (diff)
downloadpoky-76db0baba26a5da5382f7cc44c64eb705e24e638.tar.gz
bitbake: server/process: Improve idle thread exception handling
If the inotifier code has an exception, bitbake currently hangs. Catch any exception and exit if seen. Also check the idle thread is alive and exit if it disappears. This should stop bitbake hanging if such a situation arises in future such as this example: 3323260 21:48:31.554468 Running command ['getVariable', 'BBINCLUDELOGS'] Exception in thread Thread-1 (idle_thread): Traceback (most recent call last): File "/usr/lib64/python3.10/threading.py", line 1016, in _bootstrap_inner self.run() File "/usr/lib64/python3.10/threading.py", line 953, in run self._target(*self._args, **self._kwargs) File "/home/pokybuild/yocto-worker/oe-selftest-fedora/build/bitbake/lib/bb/server/process.py", line 408, in idle_thread self.cooker.process_inotify_updates() File "/home/pokybuild/yocto-worker/oe-selftest-fedora/build/bitbake/lib/bb/cooker.py", line 256, in process_inotify_updates n.read_events() File "/home/pokybuild/yocto-worker/oe-selftest-fedora/build/bitbake/lib/pyinotify.py", line 1207, in read_events if fcntl.ioctl(self._fd, termios.FIONREAD, buf_, 1) == -1: OSError: [Errno 9] Bad file descriptor 3323260 21:48:32.206995 Command Completed (socket: True) (Bitbake rev: 358b5b02d5de1ab0f98104c4ec4953e46999b9a5) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r--bitbake/lib/bb/server/process.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 916ee0a0e5..db417c8428 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -405,7 +405,11 @@ class ProcessServer():
405 nextsleep = 0.1 405 nextsleep = 0.1
406 fds = [] 406 fds = []
407 407
408 self.cooker.process_inotify_updates() 408 try:
409 self.cooker.process_inotify_updates()
410 except Exception as exc:
411 serverlog("Exception %s in inofify updates broke the idle_thread, exiting" % traceback.format_exc())
412 self.quit = True
409 413
410 with bb.utils.lock_timeout(self._idlefuncsLock): 414 with bb.utils.lock_timeout(self._idlefuncsLock):
411 items = list(self._idlefuns.items()) 415 items = list(self._idlefuns.items())
@@ -473,6 +477,10 @@ class ProcessServer():
473 if not self.idle: 477 if not self.idle:
474 self.idle = threading.Thread(target=self.idle_thread) 478 self.idle = threading.Thread(target=self.idle_thread)
475 self.idle.start() 479 self.idle.start()
480 elif self.idle and not self.idle.is_alive():
481 serverlog("Idle thread terminated, main thread exiting too")
482 bb.error("Idle thread terminated, main thread exiting too")
483 self.quit = True
476 484
477 if nextsleep is not None: 485 if nextsleep is not None:
478 if self.xmlrpc: 486 if self.xmlrpc: