From f4337b98030c00bf53ea8cd88ea51a2f091e4ed3 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 6 Oct 2008 08:09:11 +0000 Subject: [PATCH] bitbake utils.py: Fix ocassional locking glitch with a better retrying mechanism git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5415 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- bitbake-dev/lib/bb/utils.py | 21 ++++++++++++--------- bitbake/lib/bb/utils.py | 21 ++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/bitbake-dev/lib/bb/utils.py b/bitbake-dev/lib/bb/utils.py index 89506649fb..119f08582d 100644 --- a/bitbake-dev/lib/bb/utils.py +++ b/bitbake-dev/lib/bb/utils.py @@ -246,15 +246,18 @@ def lockfile(name): # This implementation is unfair since the last person to request the # lock is the most likely to win it. - lf = open(name, "a+") - fcntl.flock(lf.fileno(), fcntl.LOCK_EX) - statinfo = os.fstat(lf.fileno()) - if os.path.exists(lf.name): - statinfo2 = os.stat(lf.name) - if statinfo.st_ino == statinfo2.st_ino: - return lf - # File no longer exists or changed, retry - lf.close + try: + lf = open(name, "a+") + fcntl.flock(lf.fileno(), fcntl.LOCK_EX) + statinfo = os.fstat(lf.fileno()) + if os.path.exists(lf.name): + statinfo2 = os.stat(lf.name) + if statinfo.st_ino == statinfo2.st_ino: + return lf + # File no longer exists or changed, retry + lf.close + except Exception, e: + continue def unlockfile(lf): """ diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index d3701acca7..18fc9f7252 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py @@ -246,15 +246,18 @@ def lockfile(name): # This implementation is unfair since the last person to request the # lock is the most likely to win it. - lf = open(name, "a+") - fcntl.flock(lf.fileno(), fcntl.LOCK_EX) - statinfo = os.fstat(lf.fileno()) - if os.path.exists(lf.name): - statinfo2 = os.stat(lf.name) - if statinfo.st_ino == statinfo2.st_ino: - return lf - # File no longer exists or changed, retry - lf.close + try: + lf = open(name, "a+") + fcntl.flock(lf.fileno(), fcntl.LOCK_EX) + statinfo = os.fstat(lf.fileno()) + if os.path.exists(lf.name): + statinfo2 = os.stat(lf.name) + if statinfo.st_ino == statinfo2.st_ino: + return lf + # File no longer exists or changed, retry + lf.close + except Exception, e: + continue def unlockfile(lf): """