Commit 61fdb8d4 authored by smallcode's avatar smallcode Committed by Tim Graham
Browse files

Fixed regression in file locking on some platforms.

Some platforms with os.name == 'posix' do not have the
fcntl module, e.g. AppEngine.

refs #19373.
parent 8520e43e
Loading
Loading
Loading
Loading
+25 −25
Original line number Diff line number Diff line
@@ -85,22 +85,14 @@ if os.name == 'nt':
        overlapped = OVERLAPPED()
        ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped))
        return bool(ret)

elif os.name == 'posix':
else:
    try:
        import fcntl
        LOCK_SH = fcntl.LOCK_SH  # shared lock
        LOCK_NB = fcntl.LOCK_NB  # non-blocking
        LOCK_EX = fcntl.LOCK_EX

    def lock(f, flags):
        ret = fcntl.flock(_fd(f), flags)
        return (ret == 0)

    def unlock(f):
        ret = fcntl.flock(_fd(f), fcntl.LOCK_UN)
        return (ret == 0)

else:  # File locking is not supported.
    except (ImportError, AttributeError):
        # File locking is not supported.
        LOCK_EX = LOCK_SH = LOCK_NB = 0

        # Dummy functions that don't do anything.
@@ -111,3 +103,11 @@ else: # File locking is not supported.
        def unlock(f):
            # File is unlocked
            return True
    else:
        def lock(f, flags):
            ret = fcntl.flock(_fd(f), flags)
            return (ret == 0)

        def unlock(f):
            ret = fcntl.flock(_fd(f), fcntl.LOCK_UN)
            return (ret == 0)