windows: Fix process termination code.

The ctrl-c hack used before didn't actually seem to work.

No haskell libraries expose TerminateProcess. I tried just calling it via
FFI, but got segfaults, probably to do with the wacky process handle not
being managed correctly. Moving it all into one C function worked.

This was hell. The EvilLinker hack was just final icing on the cake.
We all know what the cake was made of.
This commit is contained in:
Joey Hess 2014-02-13 14:00:15 -04:00
parent 84083ecdd3
commit f11f7520b5
10 changed files with 58 additions and 24 deletions

View file

@ -24,7 +24,7 @@ import qualified Data.Text as T
#ifndef mingw32_HOST_OS
import System.Posix (signalProcess, sigTERM)
#else
import System.Win32.Console (generateConsoleCtrlEvent, cTRL_C_EVENT)
import Utility.WinProcess
#endif
getShutdownR :: Handler Html
@ -56,7 +56,7 @@ getShutdownConfirmedR = do
#ifndef mingw32_HOST_OS
signalProcess sigTERM =<< getPID
#else
generateConsoleCtrlEvent cTRL_C_EVENT =<< getPID
terminatePID =<< getPID
#endif
redirect NotRunningR