@@ -574,26 +574,27 @@ getChunkInfo ::
574
574
getChunkInfo cacheEnv chunk = do
575
575
lastUsed <- LastUsed <$> getMonotonicTime
576
576
-- Make sure we don't leave an empty MVar in case of an exception.
577
- mbCacheHit <- bracketOnError (takeMVar cacheVar) (tryPutMVar cacheVar) $
577
+ ( mbCacheHit, tr) <- modifyMVar cacheVar $
578
578
\ cached@ Cached { currentChunk, currentChunkInfo, nbPastChunks } -> if
579
579
| chunk == currentChunk -> do
580
580
-- Cache hit for the current chunk
581
- putMVar cacheVar cached
582
- traceWith tracer $ TraceCurrentChunkHit chunk nbPastChunks
583
- return $ Just $ Left currentChunkInfo
581
+ return ( cached
582
+ , ( Just $ Left currentChunkInfo, TraceCurrentChunkHit chunk nbPastChunks)
583
+ )
584
584
| Just (pastChunkInfo, cached') <- lookupPastChunkInfo chunk lastUsed cached -> do
585
585
-- Cache hit for an chunk in the past
586
- putMVar cacheVar cached'
587
- traceWith tracer $ TracePastChunkHit chunk nbPastChunks
588
- return $ Just $ Right pastChunkInfo
586
+ return ( cached'
587
+ , ( Just $ Right pastChunkInfo, TracePastChunkHit chunk nbPastChunks)
588
+ )
589
589
| otherwise -> do
590
590
-- Cache miss for an chunk in the past. We don't want to hold on to
591
591
-- the 'cacheVar' MVar, blocking all other access to the cace, while
592
592
-- we're reading things from disk, so put it back now and update the
593
593
-- cache afterwards.
594
- putMVar cacheVar cached
595
- traceWith tracer $ TracePastChunkMiss chunk nbPastChunks
596
- return Nothing
594
+ return ( cached
595
+ , (Nothing , TracePastChunkMiss chunk nbPastChunks)
596
+ )
597
+ traceWith tracer tr
597
598
case mbCacheHit of
598
599
Just hit -> return hit
599
600
Nothing -> do
0 commit comments