urbit/pkg/hs/urbit-king/lib/Ur/Vere/LockFile.hs

31 lines
890 B
Haskell
Raw Normal View History

2020-01-23 07:16:09 +03:00
{-|
Acquire and release the vere lockfile.
-}
2020-01-23 07:16:09 +03:00
module Ur.Vere.LockFile (lockFile) where
import Ur.Prelude
import Data.Default (def)
import RIO.Directory (createDirectoryIfMissing)
import System.IO.LockFile.Internal (LockingParameters(..), RetryStrategy(..),
lock, unlock)
--------------------------------------------------------------------------------
lockFile :: HasLogFunc e => FilePath -> RAcquire e ()
lockFile pax = void $ mkRAcquire start stop
where
fil = pax <> "/.vere.lock"
stop handle = do
logInfo $ display @Text $ ("Releasing lock file: " <> pack fil)
io $ unlock fil handle
params = def { retryToAcquireLock = No }
start = do
createDirectoryIfMissing True pax
logInfo $ display @Text $ ("Taking lock file: " <> pack fil)
io (lock params fil)