summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Logs/Transfer.hs20
-rw-r--r--Utility/Daemon.hs15
-rw-r--r--Utility/PID.hs31
3 files changed, 46 insertions, 20 deletions
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
index e998a56b1..ebbb153ac 100644
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -17,6 +17,10 @@ import Types.Key
import Utility.Metered
import Utility.Percentage
import Utility.QuickCheck
+import Utility.PID
+#ifdef mingw32_HOST_OS
+import Utility.WinLock
+#endif
import Data.Time.Clock
import Data.Time.Clock.POSIX
@@ -24,20 +28,6 @@ import Data.Time
import System.Locale
import Control.Concurrent
-#ifndef mingw32_HOST_OS
-import System.Posix.Types (ProcessID)
-#else
-import System.Win32.Process (ProcessId)
-import System.Win32.Process.Current (getCurrentProcessId)
-import Utility.WinLock
-#endif
-
-#ifndef mingw32_HOST_OS
-type PID = ProcessID
-#else
-type PID = ProcessId
-#endif
-
{- Enough information to uniquely identify a transfer, used as the filename
- of the transfer information file. -}
data Transfer = Transfer
@@ -231,7 +221,7 @@ startTransferInfo file = TransferInfo
#ifndef mingw32_HOST_OS
<*> pure Nothing -- pid not stored in file, so omitted for speed
#else
- <*> (Just <$> getCurrentProcessId)
+ <*> (Just <$> getPID)
#endif
<*> pure Nothing -- tid ditto
<*> pure Nothing -- not 0; transfer may be resuming
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs
index 1654821af..970f26c3e 100644
--- a/Utility/Daemon.hs
+++ b/Utility/Daemon.hs
@@ -1,6 +1,6 @@
{- daemon support
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,6 +10,7 @@
module Utility.Daemon where
import Common
+import Utility.PID
#ifndef mingw32_HOST_OS
import Utility.LogFile
#endif
@@ -19,6 +20,7 @@ import System.Posix
import Control.Concurrent.Async
#else
import System.PosixCompat.Types
+import System.Win32.Console (generateConsoleCtrlEvent, cTRL_C_EVENT
#endif
#ifndef mingw32_HOST_OS
@@ -70,7 +72,7 @@ lockPidFile file = do
(Nothing, _) -> alreadyRunning
(_, Nothing) -> alreadyRunning
_ -> do
- _ <- fdWrite fd' =<< show <$> getProcessID
+ _ <- fdWrite fd' =<< show <$> getPID
closeFd fd
#else
writeFile newfile "-1"
@@ -86,7 +88,7 @@ alreadyRunning = error "Daemon is already running."
- is locked by the same process that is listed in the pid file.
-
- If it's running, returns its pid. -}
-checkDaemon :: FilePath -> IO (Maybe ProcessID)
+checkDaemon :: FilePath -> IO (Maybe PID)
#ifndef mingw32_HOST_OS
checkDaemon pidfile = do
v <- catchMaybeIO $
@@ -110,11 +112,14 @@ checkDaemon pidfile = do
checkDaemon pidfile = maybe Nothing readish <$> catchMaybeIO (readFile pidfile)
#endif
-#ifndef mingw32_HOST_OS
{- Stops the daemon, safely. -}
stopDaemon :: FilePath -> IO ()
stopDaemon pidfile = go =<< checkDaemon pidfile
where
go Nothing = noop
- go (Just pid) = signalProcess sigTERM pid
+ go (Just pid) =
+#ifndef mingw32_HOST_OS
+ signalProcess sigTERM pid
+#else
+ generateConsoleCtrlEvent cTRL_C_EVENT pid
#endif
diff --git a/Utility/PID.hs b/Utility/PID.hs
new file mode 100644
index 000000000..4867bd6de
--- /dev/null
+++ b/Utility/PID.hs
@@ -0,0 +1,31 @@
+{- process ids
+ -
+ - Copyright 2014 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.PID where
+
+#ifndef mingw32_HOST_OS
+import System.Posix.Types (ProcessID)
+import System.Posix.Process (getProcessID)
+#else
+import System.Win32.Process (ProcessId)
+import System.Win32.Process.Current (getCurrentProcessId)
+#endif
+
+#ifndef mingw32_HOST_OS
+type PID = ProcessID
+#else
+type PID = ProcessId
+#endif
+
+getPID :: IO PID
+#ifndef mingw32_HOST_OS
+getPID = getProcessID
+#else
+getPID = getCurrentProcessId
+#endif