lock-file: Provide exclusive access to a resource using lock file.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.



Provide exclusive access to a resource using lock file, which are files whose purpose is to signal by their presence that some resource is locked.

[Skip to ReadMe]


Change logChangeLog.md
Dependenciesbase (>=4.5 && <4.8), data-default-class (==0.0.*), directory (>=1.1 && <1.3), exceptions (>0.6 && <0.7), tagged-exception-core (>= && <3), transformers (>=0.3 && <0.5) [details]
Copyright(c) 2013, 2014 Peter Trško
AuthorPeter Trsko
Home pagehttps://github.com/trskop/lock-file
Bug trackerhttps://github.com/trskop/lock-file/issues
Source repositoryhead: git clone git://github.com/trskop/lock-file.git
this: git clone git://github.com/trskop/lock-file.git(tag
UploadedWed Dec 24 00:00:32 UTC 2014 by PeterTrsko





Pass additional warning flags including -Werror to GHC during compilation.


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainers' corner

For package maintainers and hackage trustees

Readme for lock-file-

[back to package description]

Lock File

Hackage BSD3 License


Provide exclusive access to a resource using lock file, which are files whose purpose is to signal by their presence that some resource is locked.

Usage Example

Following example acquires lock file and then waits 1000000 micro seconds before releasing it. Note also that it is possible to specify retry strategy. Here we set it to No and therefore this code won't retry to acquire lock file after first failure.

module Main (main)

import Control.Concurrent (threadDelay)
    -- From base package, but GHC specific.

import qualified Control.Monad.TaggedException as Exception (handle)
    -- From tagged-exception-core package.
    -- http://hackage.haskell.org/package/tagged-exception-core
import Data.Default.Class (Default(def))
    -- From data-default-class package, alternatively it's possible to use
    -- data-default package version 0.5.2 and above.
    -- http://hackage.haskell.org/package/data-default-class
    -- http://hackage.haskell.org/package/data-default
import System.IO.LockFile
    ( LockingParameters(retryToAcquireLock)
    , RetryStrategy(No)
    , withLockFile

main :: IO ()
main = handleException
    . withLockFile lockParams lockFile $ threadDelay 1000000
    lockParams = def
        { retryToAcquireLock = No

    lockFile = "/var/run/lock/my-example-lock"

    handleException = Exception.handle
        $ putStrLn . ("Locking failed with: " ++) . show

This command line example shows that trying to execute two instances of example at the same time will result in failure of the second one.

$ ghc example.hs
[1 of 1] Compiling Main             ( example.hs, example.o )
Linking example ...
$ ./example & ./example
[1] 7893
Locking failed with: Unable to acquire lock file: "/var/run/lock/my-example-lock"
$ [1]+  Done                    ./example

Building options