diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-02-20 09:30:44 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-02-20 15:18:53 +0000 |
commit | 76db0baba26a5da5382f7cc44c64eb705e24e638 (patch) | |
tree | 74a7ea9f5ac3578414398036522572b026bafbe5 /bitbake/lib/bb | |
parent | 7244bf24573252fde6506da8a3f883e6c416d5ad (diff) | |
download | poky-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.py | 10 |
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: |