From 003a604a6e48a8a0ffd1564e3399b54e8c673e92 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 3 Oct 2011 18:20:29 -0400 Subject: drop the lock on error --- Branch.hs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'Branch.hs') diff --git a/Branch.hs b/Branch.hs index 82ae7029f..f1ba97c94 100644 --- a/Branch.hs +++ b/Branch.hs @@ -32,6 +32,8 @@ import System.Posix.IO import System.Posix.Files import System.Exit import qualified Data.ByteString.Lazy.Char8 as L +import Control.Monad.IO.Control (liftIOOp) +import qualified Control.Exception.Base import Types.BranchState import qualified Git @@ -345,8 +347,12 @@ fileJournal = replace "//" "_" . replace "_" "/" lockJournal :: Annex a -> Annex a lockJournal a = do g <- Annex.gitRepo - h <- liftIO $ createFile (gitAnnexJournalLock g) stdFileMode - liftIO $ waitToSetLock h (WriteLock, AbsoluteSeek, 0, 0) - r <- a - liftIO $ closeFd h - return r + let file = gitAnnexJournalLock g + liftIOOp (Control.Exception.Base.bracket (lock file) unlock) run + where + lock file = do + l <- createFile file stdFileMode + waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0) + return l + unlock = closeFd + run _ = a -- cgit v1.2.3