From: Joey Hess Date: Fri, 13 Nov 2015 16:36:37 +0000 (-0400) Subject: better lock dropping order X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~324^2~30 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e31a51c5bb70e7c9a5d2b13eaf83ae07583056c8;p=git-annex.git better lock dropping order --- diff --git a/Utility/LockFile/PidLock.hs b/Utility/LockFile/PidLock.hs index ac1df253d6..94c70e714d 100644 --- a/Utility/LockFile/PidLock.hs +++ b/Utility/LockFile/PidLock.hs @@ -20,7 +20,6 @@ import Utility.PartialPrelude import Utility.Exception import Utility.Applicative import Utility.Directory -import Utility.ThreadScheduler import Utility.Monad import Utility.Path import Utility.FileMode @@ -127,10 +126,14 @@ waitLock (Seconds timeout) lockfile = go timeout error $ "Gave up waiting for possibly stale pid lock file " ++ lockfile dropLock :: LockHandle -> IO () -dropLock (LockHandle lockfile fd plh) = do +dropLock (LockHandle lockfile fd sidelock) = do + -- Drop side lock first, at which point the pid lock will be + -- considered stale. + -- The side lock file cannot be deleted because another process may + -- have it open and be waiting to lock it. + maybe noop Posix.dropLock sidelock closeFd fd nukeFile lockfile - maybe noop Posix.dropLock plh getLockStatus :: LockFile -> IO LockStatus getLockStatus = maybe StatusUnLocked (StatusLockedBy . lockingPid) <$$> readPidLock