Kaydet (Commit) 55732593 authored tarafından Andrew M. Kuchling's avatar Andrew M. Kuchling

[Bug #1512163] Use one set of locking methods, lockf();

remove the flock() calls.

On FreeBSD, the two methods lockf() and flock() end up using the same
mechanism and the second one fails.  A Linux man page claims that the
two methods are orthogonal (so locks acquired one way don't interact
with locks acquired the other way) but that clearly must be false.
üst a7ee9eb3
......@@ -1798,7 +1798,7 @@ class _PartialFile(_ProxyFile):
def _lock_file(f, dotlock=True):
"""Lock file f using lockf, flock, and dot locking."""
"""Lock file f using lockf and dot locking."""
dotlock_done = False
try:
if fcntl:
......@@ -1810,14 +1810,6 @@ def _lock_file(f, dotlock=True):
f.name)
else:
raise
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError, e:
if e.errno == errno.EWOULDBLOCK:
raise ExternalClashError('flock: lock unavailable: %s' %
f.name)
else:
raise
if dotlock:
try:
pre_lock = _create_temporary(f.name + '.lock')
......@@ -1845,16 +1837,14 @@ def _lock_file(f, dotlock=True):
except:
if fcntl:
fcntl.lockf(f, fcntl.LOCK_UN)
fcntl.flock(f, fcntl.LOCK_UN)
if dotlock_done:
os.remove(f.name + '.lock')
raise
def _unlock_file(f):
"""Unlock file f using lockf, flock, and dot locking."""
"""Unlock file f using lockf and dot locking."""
if fcntl:
fcntl.lockf(f, fcntl.LOCK_UN)
fcntl.flock(f, fcntl.LOCK_UN)
if os.path.exists(f.name + '.lock'):
os.remove(f.name + '.lock')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment