+ let context = SessionContext serverIn absRootDir messageChan reqMap initRsp config caps
+ initState tmp_dir = SessionState (IdInt 0) (VFS mempty tmp_dir)
+ mempty 0 False Nothing
+ runSession' ses = withSystemTempDirectory "lsp-test" $ \tmp_dir ->
+ runSession context (initState tmp_dir) ses
+
+ errorHandler = throwTo mainThreadId :: SessionException -> IO()
+ serverListenerLauncher =
+ forkIO $ catch (serverHandler serverOut context) errorHandler
+ server = (Just serverIn, Just serverOut, Nothing, serverProc)
+ serverAndListenerFinalizer tid =
+ finally (timeout (messageTimeout config * 1000000)
+ (runSession' exitServer))
+ (cleanupProcess server >> killThread tid)
+
+ (result, _) <- bracket serverListenerLauncher serverAndListenerFinalizer
+ (const $ runSession' session)