Bubble up exceptions thrown on server listener thread
[lsp-test.git] / src / Language / Haskell / LSP / Test / Session.hs
index a153cba988890e08b5fe6f54e40d3a8cdfcbb377..700d9ccc84c233314f9c581bfd6bf8f810c8c1d5 100644 (file)
@@ -201,9 +201,12 @@ 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
-      launchServerHandler = forkIO $ void $ serverHandler serverOut context
+      launchServerHandler = forkIO $ catch (serverHandler serverOut context)
+                                           (throwTo mainThreadId :: SessionException -> IO ())
   (result, _) <- bracket launchServerHandler killThread $
     const $ runSession context initState session
 
@@ -332,3 +335,4 @@ logMsg t msg = do
           | otherwise       = Cyan
 
         showPretty = B.unpack . encodePretty
+