X-Git-Url: https://git.lukelau.me/?p=lsp-test.git;a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FSession.hs;h=b98dca84f975ccfd10035b27a43476e969090002;hp=a6474bb2ca1b0b9b9bd0964960c5a4670c48cadb;hb=6fa77d1acd9f1c76383ac179b36bacd9d22f2819;hpb=396083e05601ec9ce9f654f18054471634f7efa0 diff --git a/src/Language/Haskell/LSP/Test/Session.hs b/src/Language/Haskell/LSP/Test/Session.hs index a6474bb..b98dca8 100644 --- a/src/Language/Haskell/LSP/Test/Session.hs +++ b/src/Language/Haskell/LSP/Test/Session.hs @@ -269,21 +269,18 @@ runSession' serverIn serverOut mServerProc serverHandler config caps rootDir exi errorHandler = throwTo mainThreadId :: SessionException -> IO () 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) + | Just sp <- mServerProc = do + -- Give the server some time to exit cleanly + timeout msgTimeoutMs (waitForProcess sp) + cleanupProcess (Just serverIn, Just serverOut, Nothing, sp) | otherwise = pure () - finally (timeout msgTimeoutMs (runSession' exitServer)) $ do + finally (timeout msgTimeoutMs (runSession' exitServer)) -- 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 + (killThread tid >> cleanup) (result, _) <- bracket serverListenerLauncher serverAndListenerFinalizer