diff --git a/ghcide/src/Development/IDE/Core/OfInterest.hs b/ghcide/src/Development/IDE/Core/OfInterest.hs index 2a594c1021..55462740d2 100644 --- a/ghcide/src/Development/IDE/Core/OfInterest.hs +++ b/ghcide/src/Development/IDE/Core/OfInterest.hs @@ -127,7 +127,7 @@ deleteFileOfInterest state f = do scheduleGarbageCollection :: IdeState -> IO () scheduleGarbageCollection state = do GarbageCollectVar var <- getIdeGlobalState state - writeVar var True + writeVar var False -- | Typecheck all the files of interest. -- Could be improved diff --git a/ghcide/src/Development/IDE/LSP/LanguageServer.hs b/ghcide/src/Development/IDE/LSP/LanguageServer.hs index cf7845ce08..a2462599f1 100644 --- a/ghcide/src/Development/IDE/LSP/LanguageServer.hs +++ b/ghcide/src/Development/IDE/LSP/LanguageServer.hs @@ -43,6 +43,7 @@ import Development.IDE.Core.WorkerThread (withWorkerQueue) import qualified Development.IDE.Session as Session import Development.IDE.Types.Shake (WithHieDb, WithHieDbShield (..)) +import GHC.IO (unsafeInterleaveIO) import Ide.Logger import Language.LSP.Server (LanguageContextEnv, LspServerLog, @@ -249,7 +250,7 @@ handleInit recorder defaultRoot getHieDbLoc getIdeState lifetime exitClientMsg c ReactorRequest _id act k -> void $ async $ checkCancelled _id act k logWith recorder Info LogReactorThreadStopped - (WithHieDbShield withHieDb, threadQueue) <- takeMVar dbMVar + (WithHieDbShield withHieDb, threadQueue) <- unsafeInterleaveIO $ takeMVar dbMVar ide <- getIdeState env root withHieDb threadQueue registerIdeConfiguration (shakeExtras ide) initConfig pure $ Right (env,ide)