diff options
-rw-r--r-- | Utility/Daemon.hs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs index d7f0407be..3cc2eb261 100644 --- a/Utility/Daemon.hs +++ b/Utility/Daemon.hs @@ -119,16 +119,18 @@ alreadyRunning = error "Daemon is already running." - If it's running, returns its pid. -} checkDaemon :: FilePath -> IO (Maybe PID) #ifndef mingw32_HOST_OS -checkDaemon pidfile = do - v <- catchMaybeIO $ - openFd pidfile ReadOnly (Just stdFileMode) defaultFileFlags - case v of - Just fd -> do - locked <- getLock fd (ReadLock, AbsoluteSeek, 0, 0) - p <- readish <$> readFile pidfile - closeFd fd `after` return (check locked p) - Nothing -> return Nothing +checkDaemon pidfile = bracket setup cleanup go where + setup = catchMaybeIO $ + openFd pidfile ReadOnly (Just stdFileMode) defaultFileFlags + cleanup (Just fd) = closeFd fd + cleanup Nothing = return () + go (Just fd) = catchDefaultIO Nothing $ do + locked <- getLock fd (ReadLock, AbsoluteSeek, 0, 0) + p <- readish <$> readFile pidfile + return (check locked p) + go Nothing = return Nothing + check Nothing _ = Nothing check _ Nothing = Nothing check (Just (pid, _)) (Just pid') |