Skip to content

Commit 1f9b5fa

Browse files
committed
lock-less exportsMap
1 parent 7ee1ae4 commit 1f9b5fa

File tree

5 files changed

+10
-10
lines changed

5 files changed

+10
-10
lines changed

ghcide/session-loader/Development/IDE/Session.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ import System.IO
7373
import System.Info
7474

7575
import Control.Applicative (Alternative ((<|>)))
76-
import Control.Exception (evaluate)
7776
import Data.Void
7877

7978
import Control.Concurrent.STM (atomically)
8079
import Control.Concurrent.STM.TQueue
8180
import Data.Foldable (for_)
8281
import qualified Data.HashSet as Set
82+
import Data.IORef.Extra (atomicModifyIORef'_)
8383
import Data.Tuple (swap)
8484
import Database.SQLite.Simple
8585
import Development.IDE.Core.Tracing (withTrace)
@@ -407,7 +407,7 @@ loadSessionWithOptions SessionLoadingOptions{..} dir = do
407407
-- update exports map
408408
extras <- getShakeExtras
409409
let !exportsMap' = createExportsMap $ mapMaybe (fmap hirModIface) modIfaces
410-
liftIO $ modifyVar_ (exportsMap extras) $ evaluate . (exportsMap' <>)
410+
liftIO $ atomicModifyIORef'_ (exportsMap extras) $ (exportsMap' <>)
411411

412412
return (second Map.keys res)
413413

ghcide/src/Development/IDE/Core/OfInterest.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import qualified Data.Text as T
2626
import Development.IDE.Graph
2727

2828
import qualified Data.ByteString as BS
29+
import Data.IORef.Extra (atomicModifyIORef'_)
2930
import Data.Maybe (catMaybes)
3031
import Development.IDE.Core.ProgressReporting
3132
import Development.IDE.Core.RuleTypes
@@ -113,7 +114,7 @@ kick = do
113114
-- Update the exports map
114115
results <- uses GenerateCore files <* uses GetHieAst files
115116
let mguts = catMaybes results
116-
void $ liftIO $ modifyVar' exportsMap (updateExportsMapMg mguts)
117+
void $ liftIO $ atomicModifyIORef'_ exportsMap (updateExportsMapMg mguts)
117118

118119
liftIO $ progressUpdate progress KickCompleted
119120

ghcide/src/Development/IDE/Core/Shake.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ data ShakeExtras = ShakeExtras
214214
-- | A mapping of module name to known target (or candidate targets, if missing)
215215
,knownTargetsVar :: IORef (Hashed KnownTargets)
216216
-- | A mapping of exported identifiers for local modules. Updated on kick
217-
,exportsMap :: Var ExportsMap
217+
,exportsMap :: IORef ExportsMap
218218
-- | A work queue for actions added via 'runInShakeSession'
219219
,actionQueue :: ActionQueue
220220
,clientCapabilities :: ClientCapabilities
@@ -514,12 +514,12 @@ shakeOpen lspEnv defaultConfig logger debouncer
514514
indexCompleted <- newTVarIO 0
515515
indexProgressToken <- newVar Nothing
516516
let hiedbWriter = HieDbWriter{..}
517-
exportsMap <- newVar mempty
517+
exportsMap <- newIORef mempty
518518
-- lazily initialize the exports map with the contents of the hiedb
519519
_ <- async $ do
520520
logDebug logger "Initializing exports map from hiedb"
521521
em <- createExportsMapHieDb hiedb
522-
modifyVar' exportsMap (<> em)
522+
atomicModifyIORef'_ exportsMap (<> em)
523523
logDebug logger $ "Done initializing exports map from hiedb (" <> pack(show (ExportsMap.size em)) <> ")"
524524

525525
progress <- do

ghcide/src/Development/IDE/Plugin/CodeAction/Args.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ module Development.IDE.Plugin.CodeAction.Args
1414
)
1515
where
1616

17-
import Control.Concurrent.Extra
1817
import Control.Monad.Reader
1918
import Control.Monad.Trans.Maybe
2019
import Data.Either (fromRight)
@@ -59,7 +58,7 @@ runGhcideCodeAction state (CodeActionParams _ _ (TextDocumentIdentifier uri) _ra
5958
runRule GhcSession >>= \case
6059
Just env -> do
6160
pkgExports <- envPackageExports env
62-
localExports <- readVar (exportsMap $ shakeExtras state)
61+
localExports <- readIORef (exportsMap $ shakeExtras state)
6362
pure $ localExports <> pkgExports
6463
_ -> pure mempty
6564
caaIdeOptions <- onceIO $ runAction "GhcideCodeActions.getIdeOptions" state getIdeOptions

ghcide/src/Development/IDE/Plugin/Completions.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ module Development.IDE.Plugin.Completions
88
) where
99

1010
import Control.Concurrent.Async (concurrently)
11-
import Control.Concurrent.Extra
1211
import Control.Monad.Extra
1312
import Control.Monad.IO.Class
1413
import Control.Monad.Trans.Maybe
1514
import Data.Aeson
1615
import qualified Data.HashMap.Strict as Map
1716
import qualified Data.HashSet as Set
17+
import Data.IORef (readIORef)
1818
import Data.List (find)
1919
import Data.Maybe
2020
import qualified Data.Text as T
@@ -138,7 +138,7 @@ getCompletionsLSP ide plId
138138
-- set up the exports map including both package and project-level identifiers
139139
packageExportsMapIO <- fmap(envPackageExports . fst) <$> useWithStaleFast GhcSession npath
140140
packageExportsMap <- mapM liftIO packageExportsMapIO
141-
projectExportsMap <- liftIO $ readVar (exportsMap $ shakeExtras ide)
141+
projectExportsMap <- liftIO $ readIORef (exportsMap $ shakeExtras ide)
142142
let exportsMap = fromMaybe mempty packageExportsMap <> projectExportsMap
143143

144144
let moduleExports = getModuleExportsMap exportsMap

0 commit comments

Comments
 (0)