X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FSession.hs;h=700d9ccc84c233314f9c581bfd6bf8f810c8c1d5;hb=f8de45b8e1d90be9512f7cbefbefa79b821cc2a9;hp=9af3a6774150b559500ee544ce63a298b944d387;hpb=3c3116cfde875e483ec70df6069a864838283885;p=lsp-test.git diff --git a/src/Language/Haskell/LSP/Test/Session.hs b/src/Language/Haskell/LSP/Test/Session.hs index 9af3a67..700d9cc 100644 --- a/src/Language/Haskell/LSP/Test/Session.hs +++ b/src/Language/Haskell/LSP/Test/Session.hs @@ -201,13 +201,14 @@ runSessionWithHandles serverIn serverOut serverHandler config caps rootDir sessi messageChan <- newChan initRsp <- newEmptyMVar + mainThreadId <- myThreadId + let context = SessionContext serverIn absRootDir messageChan reqMap initRsp config caps initState = SessionState (IdInt 0) mempty mempty 0 False Nothing - - threadId <- forkIO $ void $ serverHandler serverOut context - (result, _) <- runSession context initState session - - killThread threadId + launchServerHandler = forkIO $ catch (serverHandler serverOut context) + (throwTo mainThreadId :: SessionException -> IO ()) + (result, _) <- bracket launchServerHandler killThread $ + const $ runSession context initState session return result @@ -334,3 +335,4 @@ logMsg t msg = do | otherwise = Cyan showPretty = B.unpack . encodePretty +