diff options
| author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-03-24 16:11:56 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-03-26 07:34:58 +0000 |
| commit | 84d5924012c58091a15459ea8101c9b78c996776 (patch) | |
| tree | f0b4addcf27d034b993461b2cb452082865ddd5f | |
| parent | b036afb53783d8600e505ee5a480a8a9f89a0403 (diff) | |
| download | poky-84d5924012c58091a15459ea8101c9b78c996776.tar.gz | |
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 <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 5df642e373..e8cea7feb4 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): | |||
| 915 | def try_mirror_url(fetch, origud, ud, ld, check = False): | 915 | def try_mirror_url(fetch, origud, ud, ld, check = False): |
| 916 | # Return of None or a value means we're finished | 916 | # Return of None or a value means we're finished |
| 917 | # False means try another url | 917 | # False means try another url |
| 918 | |||
| 919 | if ud.lockfile and ud.lockfile != origud.lockfile: | ||
| 920 | lf = bb.utils.lockfile(ud.lockfile) | ||
| 921 | |||
| 918 | try: | 922 | try: |
| 919 | if check: | 923 | if check: |
| 920 | found = ud.method.checkstatus(fetch, ud, ld) | 924 | found = ud.method.checkstatus(fetch, ud, ld) |
| @@ -980,6 +984,10 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): | |||
| 980 | except UnboundLocalError: | 984 | except UnboundLocalError: |
| 981 | pass | 985 | pass |
| 982 | return False | 986 | return False |
| 987 | finally: | ||
| 988 | if ud.lockfile and ud.lockfile != origud.lockfile: | ||
| 989 | bb.utils.unlockfile(lf) | ||
| 990 | |||
| 983 | 991 | ||
| 984 | def try_mirrors(fetch, d, origud, mirrors, check = False): | 992 | def try_mirrors(fetch, d, origud, mirrors, check = False): |
| 985 | """ | 993 | """ |
