diff options
-rw-r--r-- | Utility/Daemon.hs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs index b09dce739..3d2faed67 100644 --- a/Utility/Daemon.hs +++ b/Utility/Daemon.hs @@ -45,9 +45,11 @@ daemonize logfd pidfile changedirectory a = do lockPidFile :: Bool -> IO () -> FilePath -> IO () lockPidFile write onfailure file = do fd <- openFd file ReadWrite (Just stdFileMode) defaultFileFlags - when (write) $ void $ - fdWrite fd =<< show <$> getProcessID - catchIO (setLock fd (locktype, AbsoluteSeek, 0, 0)) (const onfailure) + locked <- catchMaybeIO $ setLock fd (locktype, AbsoluteSeek, 0, 0) + case locked of + Nothing -> onfailure + _ -> when write $ void $ + fdWrite fd =<< show <$> getProcessID where locktype | write = WriteLock |