@@ -1907,7 +1907,7 @@ class Fetch(object):
if m.verify_donestamp(ud, self.d) and not m.need_update(ud, self.d):
done = True
if not done:
- bb.utils.lockfile_to_exclusive(lf)
+ lf = bb.utils.lockfile_to_exclusive(lf)
if m.try_premirror(ud, self.d):
done = m.try_mirrors(self, ud, self.d, 'PREMIRRORS')
@@ -587,12 +587,13 @@ def lockfile(name, shared=False, retry=True, block=False):
if not retry:
return None
+# We have to drop the existing lock to avoid deadlocks
def lockfile_to_exclusive(lf):
if not lf:
return
- fileno = lf.fileno()
- fcntl.flock(fileno, fcntl.LOCK_EX)
- return
+ name = lf.name
+ unlockfile(lf)
+ return lockfile(name)
def unlockfile(lf):
"""
We need to drop the existing lock when trying to get the exclusive lock else we'd deadlock with another process trying to do the same thing. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- lib/bb/fetch2/__init__.py | 2 +- lib/bb/utils.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-)