Kill forked threads
authorLuke Lau <luke_lau@icloud.com>
Sat, 9 Jun 2018 22:15:23 +0000 (18:15 -0400)
committerLuke Lau <luke_lau@icloud.com>
Sat, 9 Jun 2018 22:15:23 +0000 (18:15 -0400)
src/Language/Haskell/LSP/Test.hs
src/Language/Haskell/LSP/Test/Replay.hs

index f4fb5c15021aa7563395feb5a405d7eb38ca032f..fb928a4b9ccd0bfbec75cd4bae66af408e885242 100644 (file)
@@ -132,10 +132,11 @@ runSessionWithHandler serverHandler rootDir session = do
   let context = SessionContext serverIn absRootDir messageChan reqMap
       initState = SessionState (IdInt 9)
 
-  forkIO $ void $ runSession' meaninglessChan context initState (serverHandler serverOut)
+  threadId <- forkIO $ void $ runSession' meaninglessChan context initState (serverHandler serverOut)
   (result, _) <- runSession' messageChan context initState session
 
   terminateProcess serverProc
+  killThread threadId
 
   return result
 
index 2b55382959dd109e0b2a4beec982699db48f4361..2d5e4e612284ab6c3329a5aa7c36c548f45a1ef2 100644 (file)
@@ -50,10 +50,14 @@ replaySession sessionDir = do
   rspSema <- newEmptyMVar
   passVar <- newEmptyMVar :: IO (MVar Bool)
 
-  forkIO $ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar) sessionDir $
-    sendMessages clientMsgs reqSema rspSema
-
-  takeMVar passVar
+  threadId <- forkIO $
+    runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar)
+                          sessionDir
+                          (sendMessages clientMsgs reqSema rspSema)
+
+  result <- takeMVar passVar
+  killThread threadId
+  return result
 
   where
     isClientMsg (FromClient _ _) = True