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() |
