From d1a4bafd34e1f93d64ecef5b4e12857598381ac8 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Fri, 2 Apr 2021 10:22:03 +0100 Subject: [PATCH 1/3] log hiedb exceptions before killing the server --- ghcide/src/Development/IDE/LSP/LanguageServer.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ghcide/src/Development/IDE/LSP/LanguageServer.hs b/ghcide/src/Development/IDE/LSP/LanguageServer.hs index 06afd28245..bf6806a2c8 100644 --- a/ghcide/src/Development/IDE/LSP/LanguageServer.hs +++ b/ghcide/src/Development/IDE/LSP/LanguageServer.hs @@ -141,7 +141,10 @@ runLanguageServer options inH outH getHieDbLoc defaultConfig onConfigurationChan logInfo (ideLogger ide) $ T.pack $ "Registering ide configuration: " <> show initConfig registerIdeConfiguration (shakeExtras ide) initConfig - _ <- flip forkFinally (const exitClientMsg) $ runWithDb dbLoc $ \hiedb hieChan -> do + let handleHieDbException e = do + logError (ideLogger ide) (T.pack $ "Unexpected exception in hiedb thread: " <> show e) + exitClientMsg + _ <- flip forkFinally handleHieDbException $ runWithDb dbLoc $ \hiedb hieChan -> do putMVar dbMVar (hiedb,hieChan) forever $ do msg <- readChan clientMsgChan From 429e5ea45709e4f08605ca085eb6f52c95860781 Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Fri, 2 Apr 2021 10:36:31 +0100 Subject: [PATCH 2/3] This is not the hiedb thread - fix message --- ghcide/src/Development/IDE/LSP/LanguageServer.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ghcide/src/Development/IDE/LSP/LanguageServer.hs b/ghcide/src/Development/IDE/LSP/LanguageServer.hs index bf6806a2c8..ca400ea6a6 100644 --- a/ghcide/src/Development/IDE/LSP/LanguageServer.hs +++ b/ghcide/src/Development/IDE/LSP/LanguageServer.hs @@ -141,10 +141,10 @@ runLanguageServer options inH outH getHieDbLoc defaultConfig onConfigurationChan logInfo (ideLogger ide) $ T.pack $ "Registering ide configuration: " <> show initConfig registerIdeConfiguration (shakeExtras ide) initConfig - let handleHieDbException e = do - logError (ideLogger ide) (T.pack $ "Unexpected exception in hiedb thread: " <> show e) + let handleServerException e = do + logError (ideLogger ide) (T.pack $ "Unexpected exception in server thread: " <> show e) exitClientMsg - _ <- flip forkFinally handleHieDbException $ runWithDb dbLoc $ \hiedb hieChan -> do + _ <- flip forkFinally handleServerException $ runWithDb dbLoc $ \hiedb hieChan -> do putMVar dbMVar (hiedb,hieChan) forever $ do msg <- readChan clientMsgChan From 5ed8a87fb61212a94b10a6f9bfaf0d89287fccea Mon Sep 17 00:00:00 2001 From: Pepe Iborra Date: Sat, 3 Apr 2021 09:40:31 +0100 Subject: [PATCH 3/3] Fix handler - either an error or success --- ghcide/src/Development/IDE/LSP/LanguageServer.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ghcide/src/Development/IDE/LSP/LanguageServer.hs b/ghcide/src/Development/IDE/LSP/LanguageServer.hs index ca400ea6a6..41e74e4025 100644 --- a/ghcide/src/Development/IDE/LSP/LanguageServer.hs +++ b/ghcide/src/Development/IDE/LSP/LanguageServer.hs @@ -141,9 +141,11 @@ runLanguageServer options inH outH getHieDbLoc defaultConfig onConfigurationChan logInfo (ideLogger ide) $ T.pack $ "Registering ide configuration: " <> show initConfig registerIdeConfiguration (shakeExtras ide) initConfig - let handleServerException e = do - logError (ideLogger ide) (T.pack $ "Unexpected exception in server thread: " <> show e) + let handleServerException (Left e) = do + logError (ideLogger ide) $ + T.pack $ "Fatal error in server thread: " <> show e exitClientMsg + handleServerException _ = pure () _ <- flip forkFinally handleServerException $ runWithDb dbLoc $ \hiedb hieChan -> do putMVar dbMVar (hiedb,hieChan) forever $ do