bitbake/utils.py: Add option of holding shared lockfiles

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2011-01-19 11:01:54 +00:00
parent e5a629f314
commit 7857834691
1 changed files with 6 additions and 2 deletions

View File

@ -399,7 +399,7 @@ def fileslocked(files):
for lock in locks: for lock in locks:
bb.utils.unlockfile(lock) bb.utils.unlockfile(lock)
def lockfile(name): def lockfile(name, shared=False):
""" """
Use the file fn as a lock file, return when the lock has been acquired. Use the file fn as a lock file, return when the lock has been acquired.
Returns a variable to pass to unlockfile(). Returns a variable to pass to unlockfile().
@ -413,6 +413,10 @@ def lockfile(name):
logger.error("Error, lockfile path is not writable!: %s" % path) logger.error("Error, lockfile path is not writable!: %s" % path)
sys.exit(1) sys.exit(1)
op = fcntl.LOCK_EX
if shared:
op = fcntl.LOCK_SH
while True: while True:
# If we leave the lockfiles lying around there is no problem # If we leave the lockfiles lying around there is no problem
# but we should clean up after ourselves. This gives potential # but we should clean up after ourselves. This gives potential
@ -427,7 +431,7 @@ def lockfile(name):
try: try:
lf = open(name, 'a+') lf = open(name, 'a+')
fileno = lf.fileno() fileno = lf.fileno()
fcntl.flock(fileno, fcntl.LOCK_EX) fcntl.flock(fileno, op)
statinfo = os.fstat(fileno) statinfo = os.fstat(fileno)
if os.path.exists(lf.name): if os.path.exists(lf.name):
statinfo2 = os.stat(lf.name) statinfo2 = os.stat(lf.name)