]> code.ossystems Code Review - openembedded-core.git/commitdiff
package_ipk/deb.bbclass: Add locking for package creation to stop conflicts
authorRichard Purdie <richard@openedhand.com>
Fri, 24 Aug 2007 16:50:56 +0000 (16:50 +0000)
committerRichard Purdie <richard@openedhand.com>
Fri, 24 Aug 2007 16:50:56 +0000 (16:50 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2557 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/classes/package_deb.bbclass
meta/classes/package_ipk.bbclass

index 241bb67e8d4a32e41d97360cd90656c9bacd622b..550436a5eb177db9228bc79a6267be0eb0642ac5 100644 (file)
@@ -61,9 +61,7 @@ python do_package_deb_install () {
 }
 
 python do_package_deb () {
-    import copy # to back up env data
-    import sys
-    import re
+    import sys, re, fcntl, copy
 
     workdir = bb.data.getVar('WORKDIR', d, 1)
     if not workdir:
@@ -96,10 +94,21 @@ python do_package_deb () {
         bb.debug(1, "No packages; nothing to do")
         return
 
+    def lockfile(name):
+        lf = open(name, "a+")
+        fcntl.flock(lf.fileno(), fcntl.LOCK_EX)
+        return lf
+
+    def unlockfile(lf):
+        fcntl.flock(lf.fileno(), fcntl.LOCK_UN)
+        lf.close
+
     for pkg in packages.split():
         localdata = bb.data.createCopy(d)
         root = "%s/install/%s" % (workdir, pkg)
 
+        lf = lockfile(root + ".lock")
+
         bb.data.setVar('ROOT', '', localdata)
         bb.data.setVar('ROOT_%s' % pkg, root, localdata)
         pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1)
@@ -130,6 +139,7 @@ python do_package_deb () {
         if not g and not bb.data.getVar('ALLOW_EMPTY', localdata):
             from bb import note
             note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1)))
+            unlockfile(lf)
             continue
         controldir = os.path.join(root, 'DEBIAN')
         bb.mkdirhier(controldir)
@@ -244,6 +254,8 @@ python do_package_deb () {
         except OSError:
             pass
         del localdata
+
+        unlockfile(lf)
 }
 
 python () {
index afe70005d989f82615fcfa68ac605a2691522318..d88d11b994b2ef3eb0b5f3a68940dd4cd4d3dd7f 100644 (file)
@@ -61,9 +61,7 @@ python package_ipk_install () {
 }
 
 python do_package_ipk () {
-       import copy # to back up env data
-       import sys
-       import re
+       import sys, re, fcntl, copy
 
        workdir = bb.data.getVar('WORKDIR', d, 1)
        if not workdir:
@@ -97,10 +95,21 @@ python do_package_ipk () {
                bb.debug(1, "No packages; nothing to do")
                return
 
+       def lockfile(name):
+               lf = open(name, "a+")
+               fcntl.flock(lf.fileno(), fcntl.LOCK_EX)
+               return lf
+
+       def unlockfile(lf):
+               fcntl.flock(lf.fileno(), fcntl.LOCK_UN)
+               lf.close
+
        for pkg in packages.split():
                localdata = bb.data.createCopy(d)
                root = "%s/install/%s" % (workdir, pkg)
 
+               lf = lockfile(root + ".lock")
+
                bb.data.setVar('ROOT', '', localdata)
                bb.data.setVar('ROOT_%s' % pkg, root, localdata)
                pkgname = bb.data.getVar('PKG_%s' % pkg, localdata, 1)
@@ -129,6 +138,7 @@ python do_package_ipk () {
                if not g and not bb.data.getVar('ALLOW_EMPTY', localdata):
                        from bb import note
                        note("Not creating empty archive for %s-%s-%s" % (pkg, bb.data.getVar('PV', localdata, 1), bb.data.getVar('PR', localdata, 1)))
+                       unlockfile(lf)
                        continue
                controldir = os.path.join(root, 'CONTROL')
                bb.mkdirhier(controldir)
@@ -236,6 +246,7 @@ python do_package_ipk () {
                except OSError:
                        pass
                del localdata
+               unlockfile(lf)
 }
 
 python () {