diff options
-rw-r--r-- | bitbake/lib/bb/server/process.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index f794505fd4..83c3e6b444 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py | |||
@@ -266,6 +266,17 @@ class ProcessServer(): | |||
266 | # Finally release the lockfile but warn about other processes holding it open | 266 | # Finally release the lockfile but warn about other processes holding it open |
267 | lock = self.bitbake_lock | 267 | lock = self.bitbake_lock |
268 | lockfile = self.bitbake_lock_name | 268 | lockfile = self.bitbake_lock_name |
269 | |||
270 | def get_lock_contents(lockfile): | ||
271 | try: | ||
272 | with open(lockfile, "r") as f: | ||
273 | return f.readlines() | ||
274 | except FileNotFoundError: | ||
275 | return None | ||
276 | |||
277 | lockcontents = get_lock_contents(lockfile) | ||
278 | serverlog("Original lockfile contents: " + str(lockcontents)) | ||
279 | |||
269 | lock.close() | 280 | lock.close() |
270 | lock = None | 281 | lock = None |
271 | 282 | ||
@@ -273,14 +284,22 @@ class ProcessServer(): | |||
273 | i = 0 | 284 | i = 0 |
274 | lock = None | 285 | lock = None |
275 | while not lock and i < 30: | 286 | while not lock and i < 30: |
276 | time.sleep(0.1) | ||
277 | lock = bb.utils.lockfile(lockfile, shared=False, retry=False, block=False) | 287 | lock = bb.utils.lockfile(lockfile, shared=False, retry=False, block=False) |
288 | if not lock: | ||
289 | newlockcontents = get_lock_contents(lockfile) | ||
290 | if newlockcontents != lockcontents: | ||
291 | # A new server was started, the lockfile contents changed, we can exit | ||
292 | serverlog("Lockfile now contains different contents, exiting: " + str(newlockcontents)) | ||
293 | return | ||
294 | time.sleep(0.1) | ||
278 | i += 1 | 295 | i += 1 |
279 | if lock: | 296 | if lock: |
280 | # We hold the lock so we can remove the file (hide stale pid data) | 297 | # We hold the lock so we can remove the file (hide stale pid data) |
281 | # via unlockfile. | 298 | # via unlockfile. |
282 | bb.utils.unlockfile(lock) | 299 | bb.utils.unlockfile(lock) |
300 | serverlog("Exiting as we could obtain the lock") | ||
283 | return | 301 | return |
302 | |||
284 | if not lock: | 303 | if not lock: |
285 | # Some systems may not have lsof available | 304 | # Some systems may not have lsof available |
286 | procs = None | 305 | procs = None |