]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
utils.py: Improve lock file function error handling (from Poky)
authorRichard Purdie <rpurdie@linux.intel.com>
Sat, 6 Dec 2008 12:09:11 +0000 (12:09 +0000)
committerRichard Purdie <rpurdie@linux.intel.com>
Sat, 6 Dec 2008 12:09:11 +0000 (12:09 +0000)
ChangeLog
lib/bb/utils.py

index 845aca85d6316da2db3cc507a3c232f2d8f4702d..f60a770eea4a9d30bfa1e976e1987397ed323912 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -162,6 +162,7 @@ Changes in Bitbake 1.9.x:
        - Add tryaltconfigs option to control whether bitbake trys using alternative providers
          to fulfil failed dependencies. It defaults to off, changing the default since this
          behaviour confuses many users and isn't often useful.
+       - Improve lock file function error handling
 
 Changes in Bitbake 1.8.0:
        - Release 1.7.x as a stable series
index 904884550e5757577b5f1a892acd0f2bc7f8eebc..59943bf5563972b45d627c7def4a3156eb5f3c63 100644 (file)
@@ -235,6 +235,12 @@ def lockfile(name):
     Use the file fn as a lock file, return when the lock has been acquired.
     Returns a variable to pass to unlockfile().
     """
+    path = os.path.dirname(name)
+    if not os.path.isdir(path):
+        import bb, sys
+        bb.msg.error(bb.msg.domain.Util, "Error, lockfile path does not exist!: %s" % path)
+        sys.exit(1)
+
     while True:
         # If we leave the lockfiles lying around there is no problem
         # but we should clean up after ourselves. This gives potential
@@ -246,15 +252,18 @@ def lockfile(name):
         # This implementation is unfair since the last person to request the 
         # lock is the most likely to win it.
 
-        lf = open(name, "a+")
-        fcntl.flock(lf.fileno(), fcntl.LOCK_EX)
-        statinfo = os.fstat(lf.fileno())
-        if os.path.exists(lf.name):
-           statinfo2 = os.stat(lf.name)
-           if statinfo.st_ino == statinfo2.st_ino:
-               return lf
-        # File no longer exists or changed, retry
-        lf.close
+        try:
+            lf = open(name, "a+")
+            fcntl.flock(lf.fileno(), fcntl.LOCK_EX)
+            statinfo = os.fstat(lf.fileno())
+            if os.path.exists(lf.name):
+               statinfo2 = os.stat(lf.name)
+               if statinfo.st_ino == statinfo2.st_ino:
+                   return lf
+            # File no longer exists or changed, retry
+            lf.close
+        except Exception, e:
+            continue
 
 def unlockfile(lf):
     """