diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-02-20 09:30:17 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-02-20 15:18:53 +0000 |
commit | 7244bf24573252fde6506da8a3f883e6c416d5ad (patch) | |
tree | 5bad00fa52a6ccc93e43cff2b4032fa8e3a5bb56 /bitbake/lib/bb/cooker.py | |
parent | b226d4877fc8c0f84d54a51c9188bfb6fc8e8bf2 (diff) | |
download | poky-7244bf24573252fde6506da8a3f883e6c416d5ad.tar.gz |
bitbake: cooker: Ensure lock is held with changing notifier
We've seen a couple of cases which bitbake hangs due to an inotifer exception
such as:
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)
Ensure we don't destory the inotifier when the idle thread is reading is
by holding the lock during setup/teardown.
(Bitbake rev: 8fc5c50c2e23017833f93bcd514d708a14fa4266)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index c5e9fa2941..b673fe10ee 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -229,24 +229,26 @@ class BBCooker: | |||
229 | self.handlePRServ() | 229 | self.handlePRServ() |
230 | 230 | ||
231 | def setupConfigWatcher(self): | 231 | def setupConfigWatcher(self): |
232 | if self.configwatcher: | 232 | with bb.utils.lock_timeout(self.inotify_threadlock): |
233 | self.configwatcher.close() | 233 | if self.configwatcher: |
234 | self.confignotifier = None | 234 | self.configwatcher.close() |
235 | self.configwatcher = None | 235 | self.confignotifier = None |
236 | self.configwatcher = pyinotify.WatchManager() | 236 | self.configwatcher = None |
237 | self.configwatcher.bbseen = set() | 237 | self.configwatcher = pyinotify.WatchManager() |
238 | self.configwatcher.bbwatchedfiles = set() | 238 | self.configwatcher.bbseen = set() |
239 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | 239 | self.configwatcher.bbwatchedfiles = set() |
240 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | ||
240 | 241 | ||
241 | def setupParserWatcher(self): | 242 | def setupParserWatcher(self): |
242 | if self.watcher: | 243 | with bb.utils.lock_timeout(self.inotify_threadlock): |
243 | self.watcher.close() | 244 | if self.watcher: |
244 | self.notifier = None | 245 | self.watcher.close() |
245 | self.watcher = None | 246 | self.notifier = None |
246 | self.watcher = pyinotify.WatchManager() | 247 | self.watcher = None |
247 | self.watcher.bbseen = set() | 248 | self.watcher = pyinotify.WatchManager() |
248 | self.watcher.bbwatchedfiles = set() | 249 | self.watcher.bbseen = set() |
249 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | 250 | self.watcher.bbwatchedfiles = set() |
251 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | ||
250 | 252 | ||
251 | def process_inotify_updates(self): | 253 | def process_inotify_updates(self): |
252 | with bb.utils.lock_timeout(self.inotify_threadlock): | 254 | with bb.utils.lock_timeout(self.inotify_threadlock): |