From: Richard Purdie Date: Thu, 24 Mar 2016 16:11:56 +0000 (+0000) Subject: bitbake: fetch2: Handle lockfiles for file:// urls redirected to mirrors X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=84d5924012c58091a15459ea8101c9b78c996776;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git bitbake: fetch2: Handle lockfiles for file:// urls redirected to mirrors 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 --- diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 5df642e3736..e8cea7feb48 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -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): """