diff options
author | Joey Hess <joey@kitenet.net> | 2013-12-10 23:32:10 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-12-10 23:48:42 -0400 |
commit | 62d93c99ce45d2f3cd486874cb0c2cd719527146 (patch) | |
tree | 2be7c769ab4964c61c7ad646f4483f9fbcc32017 | |
parent | f864a68220a0d77b5b6a5c3f4f25743e8e76aae0 (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.hs | 10 | ||||
-rw-r--r-- | Logs/Transfer.hs | 18 |
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 |