Skip to content

Commit f6451d6

Browse files
committed
merge two transactions
1 parent a092321 commit f6451d6

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,14 @@ newAsyncDebouncer = Debouncer . asyncRegisterEvent <$> STM.newIO
3535

3636
-- | Register an event that will fire after the given delay if no other event
3737
-- for the same key gets registered until then.
38-
--
39-
-- If there is a pending event for the same key, the pending event will be killed.
40-
-- Events are run unmasked so it is up to the user of `registerEvent`
41-
-- to mask if required.
4238
asyncRegisterEvent :: (Eq k, Hashable k) => STM.Map k (TVar (Seconds, IO())) -> Seconds -> k -> IO () -> IO ()
43-
asyncRegisterEvent d delay k fire = mask_ $ do
44-
prev <- atomically $ STM.lookup k d
39+
asyncRegisterEvent d delay k fire = join $ atomically $ do
40+
prev <- STM.lookup k d
4541
case prev of
46-
Just v -> do
47-
atomicallyNamed "debouncer - reset" $ writeTVar v (delay, fire)
48-
Nothing -> do
42+
Just v -> writeTVar v (delay, fire) >> return (pure ())
43+
Nothing -> return $ do
4944
var <- newTVarIO (delay, fire)
50-
_ <- asyncWithUnmask $ \unmask -> unmask $ do
45+
_ <- async $ do
5146
join $ atomicallyNamed "debouncer - sleep" $ do
5247
(s,act) <- readTVar var
5348
unsafeIOToSTM $ sleep s

0 commit comments

Comments
 (0)