projects
/
lsp-test.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
72257c6
)
Wait for the server to exit cleanly
author
Luke Lau
<luke_lau@icloud.com>
Wed, 10 Jun 2020 13:41:04 +0000
(14:41 +0100)
committer
Luke Lau
<luke_lau@icloud.com>
Wed, 10 Jun 2020 13:41:04 +0000
(14:41 +0100)
Fixes #70
src/Language/Haskell/LSP/Test/Session.hs
patch
|
blob
|
history
diff --git
a/src/Language/Haskell/LSP/Test/Session.hs
b/src/Language/Haskell/LSP/Test/Session.hs
index 9076a8e5e02e9ed819479a7d10c2f3a2d4ffc21a..2a0eb08c0f6cdb604894ea46220081ba91864240 100644
(file)
--- a/
src/Language/Haskell/LSP/Test/Session.hs
+++ b/
src/Language/Haskell/LSP/Test/Session.hs
@@
-71,7
+71,7
@@
import Language.Haskell.LSP.Test.Exceptions
import System.Console.ANSI
import System.Directory
import System.IO
import System.Console.ANSI
import System.Directory
import System.IO
-import System.Process (ProcessHandle())
+import System.Process (
waitForProcess,
ProcessHandle())
import System.Timeout
-- | A session representing one instance of launching and connecting to a server.
import System.Timeout
-- | A session representing one instance of launching and connecting to a server.
@@
-264,12
+264,15
@@
runSessionWithHandles serverIn serverOut serverProc serverHandler config caps ro
serverListenerLauncher =
forkIO $ catch (serverHandler serverOut context) errorHandler
server = (Just serverIn, Just serverOut, Nothing, serverProc)
serverListenerLauncher =
forkIO $ catch (serverHandler serverOut context) errorHandler
server = (Just serverIn, Just serverOut, Nothing, serverProc)
+ msgTimeoutMs = messageTimeout config * 10^6
serverAndListenerFinalizer tid = do
serverAndListenerFinalizer tid = do
- finally (timeout (messageTimeout config * 1^6)
- (runSession' exitServer))
+ finally (timeout msgTimeoutMs (runSession' exitServer)) $ do
-- Make sure to kill the listener first, before closing
-- handles etc via cleanupProcess
-- Make sure to kill the listener first, before closing
-- handles etc via cleanupProcess
- (killThread tid >> cleanupProcess server)
+ killThread tid
+ -- Give the server some time to exit cleanly
+ timeout msgTimeoutMs (waitForProcess serverProc)
+ cleanupProcess server
(result, _) <- bracket serverListenerLauncher
serverAndListenerFinalizer
(result, _) <- bracket serverListenerLauncher
serverAndListenerFinalizer