diff options
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 58 |
1 files changed, 1 insertions, 57 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index b1311bb170..e27763ecab 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -215,19 +215,6 @@ class BBCooker: | |||
215 | 215 | ||
216 | self.configuration.server_register_idlecallback(_process_inotify_updates, [self.confignotifier, self.notifier]) | 216 | self.configuration.server_register_idlecallback(_process_inotify_updates, [self.confignotifier, self.notifier]) |
217 | 217 | ||
218 | # Take a lock so only one copy of bitbake can run against a given build | ||
219 | # directory at a time | ||
220 | if not self.lockBitbake(): | ||
221 | bb.fatal("Only one copy of bitbake should be run against a build directory") | ||
222 | try: | ||
223 | self.lock.seek(0) | ||
224 | self.lock.truncate() | ||
225 | if len(configuration.interface) >= 2: | ||
226 | self.lock.write("%s:%s\n" % (configuration.interface[0], configuration.interface[1])); | ||
227 | self.lock.flush() | ||
228 | except: | ||
229 | pass | ||
230 | |||
231 | # TOSTOP must not be set or our children will hang when they output | 218 | # TOSTOP must not be set or our children will hang when they output |
232 | try: | 219 | try: |
233 | fd = sys.stdout.fileno() | 220 | fd = sys.stdout.fileno() |
@@ -1557,33 +1544,6 @@ class BBCooker: | |||
1557 | def post_serve(self): | 1544 | def post_serve(self): |
1558 | prserv.serv.auto_shutdown(self.data) | 1545 | prserv.serv.auto_shutdown(self.data) |
1559 | bb.event.fire(CookerExit(), self.data) | 1546 | bb.event.fire(CookerExit(), self.data) |
1560 | lockfile = self.lock.name | ||
1561 | self.lock.close() | ||
1562 | self.lock = None | ||
1563 | |||
1564 | while not self.lock: | ||
1565 | with bb.utils.timeout(3): | ||
1566 | self.lock = bb.utils.lockfile(lockfile, shared=False, retry=False, block=True) | ||
1567 | if not self.lock: | ||
1568 | # Some systems may not have lsof available | ||
1569 | procs = None | ||
1570 | try: | ||
1571 | procs = subprocess.check_output(["lsof", '-w', lockfile], stderr=subprocess.STDOUT) | ||
1572 | except OSError as e: | ||
1573 | if e.errno != errno.ENOENT: | ||
1574 | raise | ||
1575 | if procs is None: | ||
1576 | # Fall back to fuser if lsof is unavailable | ||
1577 | try: | ||
1578 | procs = subprocess.check_output(["fuser", '-v', lockfile], stderr=subprocess.STDOUT) | ||
1579 | except OSError as e: | ||
1580 | if e.errno != errno.ENOENT: | ||
1581 | raise | ||
1582 | |||
1583 | msg = "Delaying shutdown due to active processes which appear to be holding bitbake.lock" | ||
1584 | if procs: | ||
1585 | msg += ":\n%s" % str(procs) | ||
1586 | print(msg) | ||
1587 | 1547 | ||
1588 | 1548 | ||
1589 | def shutdown(self, force = False): | 1549 | def shutdown(self, force = False): |
@@ -1605,23 +1565,7 @@ class BBCooker: | |||
1605 | 1565 | ||
1606 | def clientComplete(self): | 1566 | def clientComplete(self): |
1607 | """Called when the client is done using the server""" | 1567 | """Called when the client is done using the server""" |
1608 | if self.configuration.server_only: | 1568 | self.finishcommand() |
1609 | self.finishcommand() | ||
1610 | else: | ||
1611 | self.shutdown(True) | ||
1612 | |||
1613 | def lockBitbake(self): | ||
1614 | if not hasattr(self, 'lock'): | ||
1615 | self.lock = None | ||
1616 | if self.data: | ||
1617 | lockfile = self.data.expand("${TOPDIR}/bitbake.lock") | ||
1618 | if lockfile: | ||
1619 | self.lock = bb.utils.lockfile(lockfile, False, False) | ||
1620 | return self.lock | ||
1621 | |||
1622 | def unlockBitbake(self): | ||
1623 | if hasattr(self, 'lock') and self.lock: | ||
1624 | bb.utils.unlockfile(self.lock) | ||
1625 | 1569 | ||
1626 | def server_main(cooker, func, *args): | 1570 | def server_main(cooker, func, *args): |
1627 | cooker.pre_serve() | 1571 | cooker.pre_serve() |