packages feed

flock 0.3 → 0.3.1

raw patch · 3 files changed

+67/−26 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ System.Lock.FLock: lockFd :: MonadIO m => Fd -> SharedExclusive -> Block -> m Lock
+ System.Lock.FLock: withFdLock :: (MonadIO m, MonadBaseControl IO m) => Fd -> SharedExclusive -> Block -> m a -> m a

Files

CHANGELOG view
@@ -1,3 +1,7 @@+0.3.1+  * Add lockFd and withFdLock, locking with a user-provided file+	descriptor. Thanks to Eelis for this feature.+ 0.3   * Protect against exception in withLock using monad-control. Thanks     to Takahiro Himura for this feature.
System/Lock/FLock.hsc view
@@ -1,21 +1,36 @@-{-# LANGUAGE ForeignFunctionInterface, CPP, FlexibleContexts #-}+{-# LANGUAGE ForeignFunctionInterface+           , CPP+           , FlexibleContexts+           #-} module System.Lock.FLock-      (withLock, lock, unlock,-       SharedExclusive(Shared, Exclusive), Block(Block, NoBlock), Lock) where+  ( withLock+  , withFdLock+  , lock+  , lockFd+  , unlock+  , SharedExclusive(Shared, Exclusive)+  , Block(Block, NoBlock)+  , Lock+  ) where -import Control.Monad.IO.Class (MonadIO (..))-import Data.Bits ((.|.))+import Control.Exception.Lifted    ( bracket )+import Control.Monad.IO.Class      ( MonadIO (..) )+import Control.Monad.Trans.Control ( MonadBaseControl )+import Data.Bits                   ( (.|.) )+import Foreign.C.Error             ( throwErrnoIfMinus1_ ) #if __GLASGOW_HASKELL__ > 702-import Foreign.C.Types (CInt(..))+import Foreign.C.Types             ( CInt(..) ) #else-import Foreign.C.Types (CInt)+import Foreign.C.Types             ( CInt ) #endif-import System.Posix.Error (throwErrnoPathIfMinus1_)-import System.Posix.IO (openFd, defaultFileFlags, closeFd,-                        OpenMode(ReadOnly, WriteOnly))-import System.Posix.Types (Fd(Fd))-import Control.Monad.Trans.Control (MonadBaseControl)-import Control.Exception.Lifted (bracket)+import System.Posix.Error          ( throwErrnoPathIfMinus1_ )+import System.Posix.IO             ( openFd+                                   , defaultFileFlags+                                   , closeFd+                                   , OpenMode(ReadOnly, WriteOnly)+                                   , dup+                                   )+import System.Posix.Types          ( Fd(Fd) )  #include <sys/file.h> @@ -40,19 +55,41 @@     unlock     (const x) +withFdLock :: (MonadIO m, MonadBaseControl IO m) => Fd -> SharedExclusive -> Block -> m a -> m a+withFdLock fd se b x =+  bracket+    (lockFd fd se b)+    unlock+    (const x)++operation :: SharedExclusive -> Block -> CInt+operation se b =+  case b of+    Block   -> op+    NoBlock -> op .|. c_LOCK_NB+  where+    op = case se of+           Shared    -> c_LOCK_SH+           Exclusive -> c_LOCK_EX+ lock :: MonadIO m => FilePath -> SharedExclusive -> Block -> m Lock-lock fp se b = liftIO-             $ do Fd fd <- openFd fp om Nothing defaultFileFlags-                  throwErrnoPathIfMinus1_ "flock" fp $ flock fd op'-                  return (Lock fd)-    where (om, op) = case se of-                         Shared -> (ReadOnly, c_LOCK_SH)-                         Exclusive -> (WriteOnly, c_LOCK_EX)-          op' = case b of-                    Block -> op-                    NoBlock -> op .|. c_LOCK_NB+lock fp se b = liftIO $+  do Fd fd <- openFd fp om Nothing defaultFileFlags+     throwErrnoPathIfMinus1_ "flock" fp $ flock fd (operation se b)+     return (Lock fd)+  where+    om = case se of+           Shared    -> ReadOnly+           Exclusive -> WriteOnly +lockFd :: MonadIO m => Fd -> SharedExclusive -> Block -> m Lock+lockFd fd se b = liftIO $+  do (Fd fd') <- dup fd+     throwErrnoIfMinus1_ "flock" $ flock fd' (operation se b)+     return (Lock fd')+ unlock :: MonadIO m => Lock -> m ()-unlock (Lock fd) = liftIO $ do _ <- flock fd c_LOCK_UN-                               closeFd (Fd fd)+unlock (Lock fd) = liftIO $+  do _ <- flock fd c_LOCK_UN+     closeFd (Fd fd) 
flock.cabal view
@@ -1,5 +1,5 @@ Name:               flock-Version:            0.3+Version:            0.3.1 License:            OtherLicense License-File:       COPYING Copyright:          Ian Lynagh, 2007