+ $ rebuildIndex (envStorage env)
+
+withSystemLock :: FilePath -> IO a -> IO a
+withSystemLock lockfile = bracket lock' unlock' . const
+ where
+ lock' :: IO Fd
+ lock' = do fd <- openFd
+ lockfile
+ ReadWrite
+ (Just 420) -- 0644, -rw-r--r--
+ defaultFileFlags
+ setLock fd (WriteLock, AbsoluteSeek, 0, 0)
+ return fd
+
+ unlock' :: Fd -> IO ()
+ unlock' = closeFd
+
+withPidFile :: FilePath -> IO a -> IO a
+withPidFile lockfile = bracket_ mkPid' delPid'
+ where
+ mkPid' :: IO ()
+ mkPid' = withFile lockfile WriteMode $ \ h ->
+ do pid <- getProcessID
+ hPutStrLn h (show pid)
+
+ delPid' :: IO ()
+ delPid' = removeFile lockfile