summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-12-10 23:32:10 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-12-10 23:48:42 -0400
commit62d93c99ce45d2f3cd486874cb0c2cd719527146 (patch)
tree2be7c769ab4964c61c7ad646f4483f9fbcc32017
parentf864a68220a0d77b5b6a5c3f4f25743e8e76aae0 (diff)
different PID types for Unix and Windows
Windows has a larger (unsigned) PID space, so cannot use the unix CInt there. Note that TransferInfo does not yet ever get the TransferPid populated, as there is missing locking.
-rw-r--r--Assistant/TransferSlots.hs10
-rw-r--r--Logs/Transfer.hs18
2 files changed, 20 insertions, 8 deletions
diff --git a/Assistant/TransferSlots.hs b/Assistant/TransferSlots.hs
index da92bbf0b..308d68408 100644
--- a/Assistant/TransferSlots.hs
+++ b/Assistant/TransferSlots.hs
@@ -260,13 +260,15 @@ cancelTransfer pause t = do
killproc pid = void $ tryIO $ do
#ifndef mingw32_HOST_OS
g <- getProcessGroupIDOf pid
- void $ tryIO $ signalProcessGroup sigTERM g
+ let signal sig = void $ tryIO $ signalProcessGroup sig g
+ signal sigTERM
graceperiod
- void $ tryIO $ signalProcessGroup sigKILL g
+ signal sigKILL
#else
- void $ tryIO $ generateConsoleCtrlEvent cTRL_C_EVENT pid
+ let singnal sig = void $ tryIO $ generateConsoleCtrlEvent sig pid
+ signal cTRL_C_EVENT
graceperiod
- void $ tryIO $ generateConsoleCtrlEvent cTRL_BREAK_EVENT pid
+ signal cTRL_BREAK_EVENT
#endif
graceperiod = threadDelay 50000 -- 0.05 second
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
index 24fb940d5..b96b827c6 100644
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -18,13 +18,23 @@ import Utility.Metered
import Utility.Percentage
import Utility.QuickCheck
-import System.Posix.Types
+#ifndef mingw32_HOST_OS
+import System.Posix.Types (ProcessID)
+#else
+import System.Win32.Process (ProcessId)
+#endif
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import Control.Concurrent
+#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
@@ -42,7 +52,7 @@ data Transfer = Transfer
-}
data TransferInfo = TransferInfo
{ startedTime :: Maybe POSIXTime
- , transferPid :: Maybe ProcessID
+ , transferPid :: Maybe PID
, transferTid :: Maybe ThreadId
, transferRemote :: Maybe Remote
, bytesComplete :: Maybe Integer
@@ -328,13 +338,13 @@ writeTransferInfo info = unlines
, fromMaybe "" $ associatedFile info -- comes last; arbitrary content
]
-readTransferInfoFile :: Maybe ProcessID -> FilePath -> IO (Maybe TransferInfo)
+readTransferInfoFile :: Maybe PID -> FilePath -> IO (Maybe TransferInfo)
readTransferInfoFile mpid tfile = catchDefaultIO Nothing $ do
h <- openFile tfile ReadMode
fileEncoding h
hClose h `after` (readTransferInfo mpid <$> hGetContentsStrict h)
-readTransferInfo :: Maybe ProcessID -> String -> Maybe TransferInfo
+readTransferInfo :: Maybe PID -> String -> Maybe TransferInfo
readTransferInfo mpid s = TransferInfo
<$> time
<*> pure mpid