]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: fetch2: Handle lockfiles for file:// urls redirected to mirrors
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 24 Mar 2016 16:11:56 +0000 (16:11 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 26 Mar 2016 07:34:58 +0000 (07:34 +0000)
We recently dropped lockfiles for file:// urls which in itself makes
sense.

If a file url redirects to something like an http:// mirror, we'd have
no lock taken for the original file and could race against others
trying to download the file. We therefore need to ensure there is a
lock taken in the mirror handling code.

This adds code to take such a lock, assuming it isn't the same lock
as the parent url.

(Bitbake rev: 913b6ce22cd50eac96e8937c5ffc704bfce2c023)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/fetch2/__init__.py

index 5df642e373616358a1d2cfe1cc7789c9f3257a8f..e8cea7feb480b69293ce693870a7236be7721efa 100644 (file)
@@ -915,6 +915,10 @@ def rename_bad_checksum(ud, suffix):
 def try_mirror_url(fetch, origud, ud, ld, check = False):
     # Return of None or a value means we're finished
     # False means try another url
+
+    if ud.lockfile and ud.lockfile != origud.lockfile:
+        lf = bb.utils.lockfile(ud.lockfile)
+
     try:
         if check:
             found = ud.method.checkstatus(fetch, ud, ld)
@@ -980,6 +984,10 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
         except UnboundLocalError:
             pass
         return False
+    finally:
+        if ud.lockfile and ud.lockfile != origud.lockfile:
+            bb.utils.unlockfile(lf)
+
 
 def try_mirrors(fetch, d, origud, mirrors, check = False):
     """