[utils] Fix file locking for AOSP (#2714)

Closes #2080, #2670

Authored by: jakeogh
pull/2935/head
Justin Keogh 3 years ago committed by GitHub
parent f1d130902b
commit acea8d7cfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2141,18 +2141,28 @@ if sys.platform == 'win32':
raise OSError('Unlocking file failed: %r' % ctypes.FormatError()) raise OSError('Unlocking file failed: %r' % ctypes.FormatError())
else: else:
# Some platforms, such as Jython, is missing fcntl
try: try:
import fcntl import fcntl
def _lock_file(f, exclusive, block): def _lock_file(f, exclusive, block):
fcntl.flock(f, try:
fcntl.LOCK_SH if not exclusive fcntl.flock(f,
else fcntl.LOCK_EX if block fcntl.LOCK_SH if not exclusive
else fcntl.LOCK_EX | fcntl.LOCK_NB) else fcntl.LOCK_EX if block
else fcntl.LOCK_EX | fcntl.LOCK_NB)
except BlockingIOError:
raise
except OSError: # AOSP does not have flock()
fcntl.lockf(f,
fcntl.LOCK_SH if not exclusive
else fcntl.LOCK_EX if block
else fcntl.LOCK_EX | fcntl.LOCK_NB)
def _unlock_file(f): def _unlock_file(f):
fcntl.flock(f, fcntl.LOCK_UN) try:
fcntl.flock(f, fcntl.LOCK_UN)
except OSError:
fcntl.lockf(f, fcntl.LOCK_UN)
except ImportError: except ImportError:
UNSUPPORTED_MSG = 'file locking is not supported on this platform' UNSUPPORTED_MSG = 'file locking is not supported on this platform'

Loading…
Cancel
Save