@@ -71,7 +71,7 @@ import Language.Haskell.LSP.Test.Exceptions
71
71
import System.Console.ANSI
72
72
import System.Directory
73
73
import System.IO
74
- import System.Process (ProcessHandle ())
74
+ import System.Process (waitForProcess , ProcessHandle ())
75
75
import System.Timeout
76
76
77
77
-- | A session representing one instance of launching and connecting to a server.
@@ -264,12 +264,15 @@ runSessionWithHandles serverIn serverOut serverProc serverHandler config caps ro
264
264
serverListenerLauncher =
265
265
forkIO $ catch (serverHandler serverOut context) errorHandler
266
266
server = (Just serverIn, Just serverOut, Nothing , serverProc)
267
+ msgTimeoutMs = messageTimeout config * 10 ^ 6
267
268
serverAndListenerFinalizer tid = do
268
- finally (timeout (messageTimeout config * 1 ^ 6 )
269
- (runSession' exitServer))
270
- -- Make sure to kill the listener first, before closing
271
- -- handles etc via cleanupProcess
272
- (killThread tid >> cleanupProcess server)
269
+ finally (timeout msgTimeoutMs (runSession' exitServer)) $ do
270
+ -- Make sure to kill the listener first, before closing
271
+ -- handles etc via cleanupProcess
272
+ killThread tid
273
+ -- Give the server some time to exit cleanly
274
+ timeout msgTimeoutMs (waitForProcess serverProc)
275
+ cleanupProcess server
273
276
274
277
(result, _) <- bracket serverListenerLauncher
275
278
serverAndListenerFinalizer
0 commit comments