summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-03-25 14:51:43 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-03-26 09:27:43 +0000
commit7e273d09d0fe30c3254edd864fb822777109cddc (patch)
tree26bbdfd982c70f7a1ab978a83cf4744132545c6a /bitbake
parentcff6c1a18d56e20d99d2331704dd490940c386e3 (diff)
downloadpoky-7e273d09d0fe30c3254edd864fb822777109cddc.tar.gz
bitbake: cooker: Fix inotify watches causing memory resident bitbake corruption
Thanks to great debugging from pavel@zhukoff.net we had a simpler reproducer for the corruption see in oe-selftest when using BB_SERVER_TIMEOUT=60, i.e. with bitbake in memory resident mode. This was effectively: oe-selftest -r devtool.DevtoolUpgradeTests.test_devtool_upgrade devtool.DevtoolUpgradeTests.test_devtool_upgrade_git -j 1 -K The issue is that if directories are removed (such as workspace), if they are added again, we don't have the watches in place any more. This patch adds some slightly paranoid checks to ensure we do the correct things for directory additions and removals (we track directories, not files specifically to avoid running out of watches). [YOCTO #14023] (Bitbake rev: 2c414f659d793d732041614caedd773959eb4f27) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cooker.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index c0a7a2fd79..eac956aa97 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -253,6 +253,11 @@ class BBCooker:
253 return 253 return
254 if not event.pathname in self.configwatcher.bbwatchedfiles: 254 if not event.pathname in self.configwatcher.bbwatchedfiles:
255 return 255 return
256 if "IN_ISDIR" in event.maskname:
257 if "IN_CREATE" in event.maskname:
258 self.add_filewatch([[event.pathname]], watcher=self.configwatcher, dirs=True)
259 elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
260 self.configwatcher.bbseen.remove(event.pathname)
256 if not event.pathname in self.inotify_modified_files: 261 if not event.pathname in self.inotify_modified_files:
257 self.inotify_modified_files.append(event.pathname) 262 self.inotify_modified_files.append(event.pathname)
258 self.baseconfig_valid = False 263 self.baseconfig_valid = False
@@ -266,6 +271,11 @@ class BBCooker:
266 if event.pathname.endswith("bitbake-cookerdaemon.log") \ 271 if event.pathname.endswith("bitbake-cookerdaemon.log") \
267 or event.pathname.endswith("bitbake.lock"): 272 or event.pathname.endswith("bitbake.lock"):
268 return 273 return
274 if "IN_ISDIR" in event.maskname:
275 if "IN_CREATE" in event.maskname:
276 self.add_filewatch([[event.pathname]], dirs=True)
277 elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
278 self.watcher.bbseen.remove(event.pathname)
269 if not event.pathname in self.inotify_modified_files: 279 if not event.pathname in self.inotify_modified_files:
270 self.inotify_modified_files.append(event.pathname) 280 self.inotify_modified_files.append(event.pathname)
271 self.parsecache_valid = False 281 self.parsecache_valid = False