summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2014-03-05 11:21:55 +0100
committerJasper Van der Jeugt <jaspervdj@gmail.com>2014-03-05 11:21:55 +0100
commit677a7f0f2d6e2daeb57f7897b1f77b0993243839 (patch)
tree18eca7cf1f28dac10def8df6c4379ef61462db3b /src
parentecdc1d3efc2d333225da12d69ed0eed1cbbea5e2 (diff)
parent6521cd7cbcea170ab2b02ed690e8de196ec01eed (diff)
downloadhakyll-677a7f0f2d6e2daeb57f7897b1f77b0993243839.tar.gz
Merge pull request #230 from nagisa/watch-threading
Use OS threads for watch in Windows
Diffstat (limited to 'src')
-rw-r--r--src/Hakyll/Commands.hs21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/Hakyll/Commands.hs b/src/Hakyll/Commands.hs
index 7951f4e..6664181 100644
--- a/src/Hakyll/Commands.hs
+++ b/src/Hakyll/Commands.hs
@@ -9,13 +9,15 @@ module Hakyll.Commands
, rebuild
, server
, deploy
- , watch
+ , watch
) where
--------------------------------------------------------------------------------
import System.Exit (exitWith, ExitCode)
+import System.IO.Error (catchIOError)
import Control.Applicative
+import Control.Monad (void)
import Control.Concurrent
--------------------------------------------------------------------------------
@@ -83,17 +85,22 @@ preview _ _ _ _ = previewServerDisabled
watch :: Configuration -> Verbosity -> Int -> Bool -> Rules a -> IO ()
#ifdef WATCH_SERVER
watch conf verbosity port runServer rules = do
- watchUpdates conf update
- _ <- forkIO (server')
- loop
+#ifndef mingw32_HOST_OS
+ _ <- forkIO $ watchUpdates conf update
+#else
+ -- Force windows users to compile with -threaded flag, as otherwise
+ -- thread is blocked indefinitely.
+ catchIOError (void $ forkOS $ watchUpdates conf update) $ do
+ fail $ "Hakyll.Commands.watch: Could not start update watching " ++
+ "thread. Did you compile with -threaded flag?"
+#endif
+ server'
where
update = do
(_, ruleSet) <- run conf verbosity rules
return $ rulesPattern ruleSet
-
loop = threadDelay 100000 >> loop
-
- server' = if runServer then server conf port else return ()
+ server' = if runServer then server conf port else loop
#else
watch _ _ _ _ _ = watchServerDisabled
#endif