diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-03-01 12:12:57 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-03-01 12:12:57 -0400 |
commit | 3320b791d35ccc55f0931a833b86cfcaa180b8db (patch) | |
tree | b1ebad854e7df0c2a8253d5a90303b54356ff474 /Annex/LockPool/PosixOrPid.hs | |
parent | ef9c96a39c7f333d23dc225e0ccbff6737ed128a (diff) |
Fix data loss that can occur when annex.pidlock is set in a repository.
Diffstat (limited to 'Annex/LockPool/PosixOrPid.hs')
-rw-r--r-- | Annex/LockPool/PosixOrPid.hs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Annex/LockPool/PosixOrPid.hs b/Annex/LockPool/PosixOrPid.hs index ecf96d51f..74ac3f178 100644 --- a/Annex/LockPool/PosixOrPid.hs +++ b/Annex/LockPool/PosixOrPid.hs @@ -47,8 +47,14 @@ tryLockExclusive :: Maybe FileMode -> LockFile -> Annex (Maybe LockHandle) tryLockExclusive m f = tryPidLock m f $ Posix.tryLockExclusive m f checkLocked :: LockFile -> Annex (Maybe Bool) -checkLocked f = Posix.checkLocked f - `pidLockCheck` Pid.checkLocked +checkLocked f = Posix.checkLocked f `pidLockCheck` checkpid + where + checkpid pidlock = do + v <- Pid.checkLocked pidlock + case v of + -- Only return true when the posix lock file exists. + Just _ -> Posix.checkLocked f + Nothing -> return Nothing getLockStatus :: LockFile -> Annex LockStatus getLockStatus f = Posix.getLockStatus f |