use lock pools throughout git-annex
The one exception is in Utility.Daemon. As long as a process only daemonizes once, which seems reasonable, and as long as it avoids calling checkDaemon once it's already running as a daemon, the fcntl locking gotchas won't be a problem there. Annex.LockFile has it's own separate lock pool layer, which has been renamed to LockCache. This is a persistent cache of locks that persist until closed. This is not quite done; lockContent stil needs to be converted.
This commit is contained in:
parent
6915b71c57
commit
ecb0d5c087
13 changed files with 45 additions and 44 deletions
|
@ -18,11 +18,9 @@ module Utility.LockPool.Posix (
|
|||
|
||||
import qualified Utility.LockFile.Posix as F
|
||||
import qualified Utility.LockPool.STM as P
|
||||
import Utility.LockPool.STM (LockPool, LockFile, LockMode(..))
|
||||
import Utility.LockPool.STM (LockFile, LockMode(..))
|
||||
import Utility.LockPool.LockHandle
|
||||
import Utility.Monad
|
||||
|
||||
import Control.Concurrent.STM
|
||||
import System.IO
|
||||
import System.Posix
|
||||
import Data.Maybe
|
||||
|
|
|
@ -80,16 +80,15 @@ tryTakeLock pool file mode =
|
|||
--
|
||||
-- Note that the lock pool is left empty while the checker action is run.
|
||||
-- This allows checker actions that open/close files, and so would be in
|
||||
-- danger of conflicting with existing locks. Since the lock pool is
|
||||
-- kept empty, anything that attempts to take a lock will block,
|
||||
-- avoiding that race.
|
||||
-- danger of conflicting with locks created at the same time this is
|
||||
-- running. With the lock pool empty, anything that attempts
|
||||
-- to take a lock will block, avoiding that race.
|
||||
getLockStatus :: LockPool -> LockFile -> IO v -> IO (Maybe v) -> IO (Maybe v)
|
||||
getLockStatus pool file getdefault checker = do
|
||||
v <- atomically $ do
|
||||
m <- takeTMVar pool
|
||||
let threadlocked = case M.lookup file m of
|
||||
Just (LockStatus _ n)
|
||||
| n > 0 -> True
|
||||
Just (LockStatus _ n) | n > 0 -> True
|
||||
_ -> False
|
||||
if threadlocked
|
||||
then do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue