fix(arc): actually invalidate
This commit is contained in:
parent
9b5adbd00f
commit
ef4734ebb6
@ -146,7 +146,13 @@ arcAlterF !(force -> unhashedK@(hashed -> k)) f oldARC@ARC{..} now
|
|||||||
| later <= initialARCTick = uncurry (arcAlterF unhashedK f) $ initARC arcMaximumGhost arcMaximumWeight
|
| later <= initialARCTick = uncurry (arcAlterF unhashedK f) $ initARC arcMaximumGhost arcMaximumWeight
|
||||||
| otherwise = (, later) <$> if
|
| otherwise = (, later) <$> if
|
||||||
| Just (_p, x@(_, w), arcFrequent') <- HashPSQ.deleteView k arcFrequent
|
| Just (_p, x@(_, w), arcFrequent') <- HashPSQ.deleteView k arcFrequent
|
||||||
-> f (Just x) <&> \(fromMaybe x -> !(force -> x'@(_, w')))
|
-> f (Just x) <&> \case
|
||||||
|
Nothing -> oldARC
|
||||||
|
{ arcFrequent = arcFrequent'
|
||||||
|
, arcGhostFrequent = HashPSQ.insert k now () arcGhostFrequent
|
||||||
|
, arcFrequentWeight = arcFrequentWeight - w
|
||||||
|
}
|
||||||
|
Just !(force -> x'@(_, w'))
|
||||||
-> let (arcFrequent'', arcFrequentWeight'', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent' (arcFrequentWeight - w) arcGhostFrequent
|
-> let (arcFrequent'', arcFrequentWeight'', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent' (arcFrequentWeight - w) arcGhostFrequent
|
||||||
in oldARC
|
in oldARC
|
||||||
{ arcFrequent = HashPSQ.insert k now x' arcFrequent''
|
{ arcFrequent = HashPSQ.insert k now x' arcFrequent''
|
||||||
@ -154,7 +160,13 @@ arcAlterF !(force -> unhashedK@(hashed -> k)) f oldARC@ARC{..} now
|
|||||||
, arcGhostFrequent = arcGhostFrequent'
|
, arcGhostFrequent = arcGhostFrequent'
|
||||||
}
|
}
|
||||||
| Just (_p, x@(_, w), arcRecent') <- HashPSQ.deleteView k arcRecent
|
| Just (_p, x@(_, w), arcRecent') <- HashPSQ.deleteView k arcRecent
|
||||||
-> f (Just x) <&> \(fromMaybe x -> !(force -> x'@(_, w')))
|
-> f (Just x) <&> \case
|
||||||
|
Nothing -> oldARC
|
||||||
|
{ arcRecent = arcRecent'
|
||||||
|
, arcGhostRecent = HashPSQ.insert k now () $ evictGhostToCount arcGhostRecent
|
||||||
|
, arcRecentWeight = arcRecentWeight - w
|
||||||
|
}
|
||||||
|
Just !(force -> x'@(_, w'))
|
||||||
-> let (arcFrequent', arcFrequentWeight', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent arcFrequentWeight arcGhostFrequent
|
-> let (arcFrequent', arcFrequentWeight', arcGhostFrequent') = evictToSize (arcMaximumWeight |- arcTargetRecent |- w') arcFrequent arcFrequentWeight arcGhostFrequent
|
||||||
in oldARC
|
in oldARC
|
||||||
{ arcRecent = arcRecent'
|
{ arcRecent = arcRecent'
|
||||||
|
|||||||
Reference in New Issue
Block a user