- serverLauncher = forkIO $ catch (serverHandler serverOut context) errorHandler
- serverFinalizer tid = runSession' exitServer >> killThread tid
+ serverListenerLauncher =
+ forkIO $ catch (serverHandler serverOut context) errorHandler
+ server = (Just serverIn, Just serverOut, Nothing, serverProc)
+ msgTimeoutMs = messageTimeout config * 10^6
+ serverAndListenerFinalizer tid = do
+ let cleanup
+ | Just sp <- mServerProc = cleanupProcess (Just serverIn, Just serverOut, Nothing, sp)
+ | otherwise = pure ()
+ finally (timeout msgTimeoutMs (runSession' exitServer)) $ do
+ -- Make sure to kill the listener first, before closing
+ -- handles etc via cleanupProcess
+ killThread tid
+ -- Give the server some time to exit cleanly
+#ifndef mingw32_HOST_OS
+ timeout msgTimeoutMs (waitForProcess serverProc)
+#endif
+ cleanup