Skip to content

Commit b47ab52

Browse files
committed
improve contention in progress reporting
1 parent e5fa387 commit b47ab52

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

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

+12-14
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,18 @@ newInProgress :: IO InProgressState
8383
newInProgress = InProgressState <$> newTVarIO 0 <*> newTVarIO 0 <*> STM.newIO
8484

8585
recordProgress :: InProgressState -> NormalizedFilePath -> (Int -> Int) -> IO ()
86-
recordProgress InProgressState{..} file shift = atomicallyNamed "recordProgress" $ do
87-
done <- readTVar doneVar
88-
todo <- readTVar todoVar
89-
(prev, new) <- STM.focus alterPrevAndNew file currentVar
90-
let (done',todo') =
91-
case (prev,new) of
92-
(Nothing,0) -> (done+1, todo+1)
93-
(Nothing,_) -> (done, todo+1)
94-
(Just 0, 0) -> (done , todo)
95-
(Just 0, _) -> (done-1, todo)
96-
(Just _, 0) -> (done+1, todo)
97-
(Just _, _) -> (done , todo)
98-
writeTVar todoVar todo'
99-
writeTVar doneVar done'
86+
recordProgress InProgressState{..} file shift = do
87+
(prev, new) <- atomicallyNamed "recordProgress" $ STM.focus alterPrevAndNew file currentVar
88+
atomicallyNamed "recordProgress2" $ do
89+
done <- readTVar doneVar
90+
todo <- readTVar todoVar
91+
case (prev,new) of
92+
(Nothing,0) -> writeTVar doneVar (done+1) >> writeTVar todoVar (todo+1)
93+
(Nothing,_) -> writeTVar todoVar (todo+1)
94+
(Just 0, 0) -> pure ()
95+
(Just 0, _) -> writeTVar doneVar (done-1)
96+
(Just _, 0) -> writeTVar doneVar (done+1)
97+
(Just _, _) -> pure()
10098
where
10199
alterPrevAndNew = do
102100
prev <- Focus.lookup

0 commit comments

Comments
 (0)