diff options
author | Joey Hess <joey@kitenet.net> | 2014-07-14 15:44:44 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-07-14 15:52:00 -0400 |
commit | 28c3b4fdda5809b18f7a046a1923ab2fb5c1b157 (patch) | |
tree | 13d674c1c4d60c4604699af6738ffaf9e0598e18 | |
parent | c43e4de3495d8574e731d756c9c6e468d028b01e (diff) |
Windows: Fix locking issue that prevented the webapp starting (since 5.20140707).
Reversion introduced in 89c188fac37c20c40b0a9dabeb35403cfa4e4f52.
The locking code was wrong; the webapp re-ran itself, saw pid was locked,
and so didn't start!
-rw-r--r-- | Assistant.hs | 3 | ||||
-rw-r--r-- | Utility/Daemon.hs | 13 | ||||
-rw-r--r-- | debian/changelog | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/Assistant.hs b/Assistant.hs index 03864c420..c1f480f9d 100644 --- a/Assistant.hs +++ b/Assistant.hs @@ -102,7 +102,6 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser = createAnnexDirectory (parentDir logfile) ifM (liftIO $ isNothing <$> getEnv flag) ( liftIO $ withFile devNull WriteMode $ \nullh -> do - Utility.Daemon.lockPidFile pidfile when (not foreground) $ debugM desc $ "logging to " ++ logfile loghandle <- openLog logfile @@ -116,7 +115,7 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser = , std_err = UseHandle loghandle } exitWith =<< waitForProcess pid - , start id $ do + , start (Utility.Daemon.foreground (Just pidfile)) $ case startbrowser of Nothing -> Nothing Just a -> Just $ a Nothing Nothing diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs index 23d18d2b6..228263911 100644 --- a/Utility/Daemon.hs +++ b/Utility/Daemon.hs @@ -21,6 +21,8 @@ import Utility.WinLock #ifndef mingw32_HOST_OS import System.Posix import Control.Concurrent.Async +#else +import System.Exit #endif #ifndef mingw32_HOST_OS @@ -54,15 +56,26 @@ daemonize logfd pidfile changedirectory a = do wait =<< asyncWithUnmask (\unmask -> unmask a) out out = exitImmediately ExitSuccess +#endif {- To run an action that is normally daemonized in the forground. -} +#ifndef mingw32_HOST_OS foreground :: Fd -> Maybe FilePath -> IO () -> IO () foreground logfd pidfile a = do +#else +foreground :: Maybe FilePath -> IO () -> IO () +foreground pidfile a = do +#endif maybe noop lockPidFile pidfile +#ifndef mingw32_HOST_OS _ <- tryIO createSession redirLog logfd +#endif a +#ifndef mingw32_HOST_OS exitImmediately ExitSuccess +#else + exitWith ExitSuccess #endif {- Locks the pid file, with an exclusive, non-blocking lock, diff --git a/debian/changelog b/debian/changelog index 843f1b87a..5cefc2888 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,8 @@ git-annex (5.20140710) UNRELEASED; urgency=medium resolver. * Deal with change in git 2.0 that made indirect mode merge conflict resolution leave behind old files. + * Windows: Fix locking issue that prevented the webapp starting + (since 5.20140707). -- Joey Hess <joeyh@debian.org> Wed, 09 Jul 2014 23:29:21 -0400 |