@@ -83,6 +83,7 @@ import Data.IORef
8383import Colog.Core (LogAction (.. ), WithSeverity (.. ), Severity (.. ))
8484import Data.String (fromString )
8585import Data.Either (partitionEithers )
86+ import Control.Concurrent.Async (async , cancel )
8687
8788-- | A session representing one instance of launching and connecting to a server.
8889--
@@ -303,9 +304,9 @@ runSession' serverIn serverOut mServerProc serverHandler config caps rootDir exi
303304
304305 errorHandler = throwTo mainThreadId :: SessionException -> IO ()
305306 serverListenerLauncher =
306- forkIO $ catch (serverHandler serverOut context) errorHandler
307+ async $ catch (serverHandler serverOut context) errorHandler
307308 msgTimeoutMs = messageTimeout config * 10 ^ 6
308- serverAndListenerFinalizer tid = do
309+ serverAndListenerFinalizer async = do
309310 let cleanup
310311 | Just sp <- mServerProc = do
311312 -- Give the server some time to exit cleanly
@@ -318,7 +319,7 @@ runSession' serverIn serverOut mServerProc serverHandler config caps rootDir exi
318319 finally (timeout msgTimeoutMs (runSession' exitServer))
319320 -- Make sure to kill the listener first, before closing
320321 -- handles etc via cleanupProcess
321- (killThread tid >> cleanup)
322+ (cancel async >> cleanup)
322323
323324 (result, _) <- bracket serverListenerLauncher
324325 serverAndListenerFinalizer
0 commit comments