diff options
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 46e5560e83..52b81be7b6 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -38,6 +38,8 @@ import bb, bb.exceptions, bb.command | |||
38 | from bb import utils, data, parse, event, cache, providers, taskdata, runqueue, build | 38 | from bb import utils, data, parse, event, cache, providers, taskdata, runqueue, build |
39 | import Queue | 39 | import Queue |
40 | import signal | 40 | import signal |
41 | import subprocess | ||
42 | import errno | ||
41 | import prserv.serv | 43 | import prserv.serv |
42 | import pyinotify | 44 | import pyinotify |
43 | 45 | ||
@@ -1532,6 +1534,34 @@ class BBCooker: | |||
1532 | def post_serve(self): | 1534 | def post_serve(self): |
1533 | prserv.serv.auto_shutdown(self.data) | 1535 | prserv.serv.auto_shutdown(self.data) |
1534 | bb.event.fire(CookerExit(), self.expanded_data) | 1536 | bb.event.fire(CookerExit(), self.expanded_data) |
1537 | lockfile = self.lock.name | ||
1538 | self.lock.close() | ||
1539 | self.lock = None | ||
1540 | |||
1541 | while not self.lock: | ||
1542 | with bb.utils.timeout(3): | ||
1543 | self.lock = bb.utils.lockfile(lockfile, shared=False, retry=False, block=True) | ||
1544 | if not self.lock: | ||
1545 | # Some systems may not have lsof available | ||
1546 | procs = None | ||
1547 | try: | ||
1548 | procs = subprocess.check_output(["lsof", '-w', lockfile], stderr=subprocess.STDOUT) | ||
1549 | except OSError as e: | ||
1550 | if e.errno != errno.ENOENT: | ||
1551 | raise | ||
1552 | if procs is None: | ||
1553 | # Fall back to fuser if lsof is unavailable | ||
1554 | try: | ||
1555 | procs = subprocess.check_output(["fuser", '-v', lockfile], stderr=subprocess.STDOUT) | ||
1556 | except OSError as e: | ||
1557 | if e.errno != errno.ENOENT: | ||
1558 | raise | ||
1559 | |||
1560 | msg = "Delaying shutdown due to active processes which appear to be holding bitbake.lock" | ||
1561 | if procs: | ||
1562 | msg += ":\n%s" % str(procs) | ||
1563 | print(msg) | ||
1564 | |||
1535 | 1565 | ||
1536 | def shutdown(self, force = False): | 1566 | def shutdown(self, force = False): |
1537 | if force: | 1567 | if force: |