* [PATCH 1/3] cooker.py: Lock/Unlock members function into BBCooker
2015-07-07 9:45 [PATCH 0/3] On knotty, Make sure bitbake.lock is unlocked before exiting leonardo.sandoval.gonzalez
@ 2015-07-07 9:45 ` leonardo.sandoval.gonzalez
2015-07-07 9:46 ` [PATCH 2/3] command.py: Unlock function included into CommandsSync class leonardo.sandoval.gonzalez
2015-07-07 9:46 ` [PATCH 3/3] knotty.py: Make sure bitbake.lock is unlocked before exiting leonardo.sandoval.gonzalez
2 siblings, 0 replies; 4+ messages in thread
From: leonardo.sandoval.gonzalez @ 2015-07-07 9:45 UTC (permalink / raw)
To: bitbake-devel
From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
---
bitbake/lib/bb/cooker.py | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index f31bca6..b4c5de0 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -151,9 +151,7 @@ class BBCooker:
# Take a lock so only one copy of bitbake can run against a given build
# directory at a time
- lockfile = self.data.expand("${TOPDIR}/bitbake.lock")
- self.lock = bb.utils.lockfile(lockfile, False, False)
- if not self.lock:
+ if not self.lockBitbake():
bb.fatal("Only one copy of bitbake should be run against a build directory")
try:
self.lock.seek(0)
@@ -1544,6 +1542,19 @@ class BBCooker:
def reset(self):
self.initConfigurationData()
+ def lockBitbake(self):
+ if not hasattr(self, 'lock'):
+ self.lock = None
+ if self.data:
+ lockfile = self.data.expand("${TOPDIR}/bitbake.lock")
+ if lockfile:
+ self.lock = bb.utils.lockfile(lockfile, False, False)
+ return self.lock
+
+ def unlockBitbake(self):
+ if hasattr(self, 'lock') and self.lock:
+ bb.utils.unlockfile(self.lock)
+
def server_main(cooker, func, *args):
cooker.pre_serve()
--
1.8.4.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/3] command.py: Unlock function included into CommandsSync class
2015-07-07 9:45 [PATCH 0/3] On knotty, Make sure bitbake.lock is unlocked before exiting leonardo.sandoval.gonzalez
2015-07-07 9:45 ` [PATCH 1/3] cooker.py: Lock/Unlock members function into BBCooker leonardo.sandoval.gonzalez
@ 2015-07-07 9:46 ` leonardo.sandoval.gonzalez
2015-07-07 9:46 ` [PATCH 3/3] knotty.py: Make sure bitbake.lock is unlocked before exiting leonardo.sandoval.gonzalez
2 siblings, 0 replies; 4+ messages in thread
From: leonardo.sandoval.gonzalez @ 2015-07-07 9:46 UTC (permalink / raw)
To: bitbake-devel
From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
Function which calls cooker's unlock method, which in turn unlocks bitbake.lock
file.
Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
---
bitbake/lib/bb/command.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
index 24ff341..2b02584 100644
--- a/bitbake/lib/bb/command.py
+++ b/bitbake/lib/bb/command.py
@@ -267,6 +267,12 @@ class CommandsSync:
features = params[0]
command.cooker.setFeatures(features)
+ def unlockBitbake(self, command, params):
+ """
+ Unlock bitbake.lock file
+ """
+ command.cooker.unlockBitbake()
+
# although we change the internal state of the cooker, this is transparent since
# we always take and leave the cooker in state.initial
setFeatures.readonly = True
--
1.8.4.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 3/3] knotty.py: Make sure bitbake.lock is unlocked before exiting
2015-07-07 9:45 [PATCH 0/3] On knotty, Make sure bitbake.lock is unlocked before exiting leonardo.sandoval.gonzalez
2015-07-07 9:45 ` [PATCH 1/3] cooker.py: Lock/Unlock members function into BBCooker leonardo.sandoval.gonzalez
2015-07-07 9:46 ` [PATCH 2/3] command.py: Unlock function included into CommandsSync class leonardo.sandoval.gonzalez
@ 2015-07-07 9:46 ` leonardo.sandoval.gonzalez
2 siblings, 0 replies; 4+ messages in thread
From: leonardo.sandoval.gonzalez @ 2015-07-07 9:46 UTC (permalink / raw)
To: bitbake-devel
From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
Before exiting the UI, unlocks the bitbake.lock owned by cooker; this
way consecutive bitbake executions can lock it again without trouble.
[Yocto #7941]
Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
---
bitbake/lib/bb/ui/knotty.py | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index 2bee242..9788a92 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -310,6 +310,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
errors = 0
warnings = 0
taskfailures = []
+ locktries = 10
termfilter = tf(main, helper, console, errconsole, format)
atexit.register(termfilter.finish)
@@ -537,6 +538,25 @@ def main(server, eventHandler, params, tf = TerminalFilter):
_, error = server.runCommand(["stateForceShutdown"])
main.shutdown = 2
try:
+ topdir, error = server.runCommand(["getVariable", "TOPDIR"])
+ if error:
+ logger.warn("Unable to get the value of TOPDIR variable: %s" % error)
+ else:
+ lockfile = "%s/bitbake.lock" % topdir
+ _, error = server.runCommand(["unlockBitbake"])
+ if error:
+ logger.warn("Unable to unlock the file %s" % lockfile)
+ else:
+ while locktries:
+ lf = bb.utils.lockfile(lockfile, False, False)
+ if not lf:
+ time.sleep(1)
+ locktries -=1
+ else:
+ bb.utils.unlockfile(lf)
+ break
+ if not locktries:
+ logger.warn("Knotty could not lock the file ${TOPDIR}/bitbake.lock, probably locked by cooker and not unlocked yet. Immediate bitbake commands may failed")
summary = ""
if taskfailures:
summary += pluralise("\nSummary: %s task failed:",
--
1.8.4.5
^ permalink raw reply related [flat|nested] 4+ messages in thread