@@ -687,33 +687,33 @@ atomicUnspendCredits (CreditsVar var) unspend =
687
687
Ref (MergingRun IO h)
688
688
-> CreditThreshold
689
689
-> Credits
690
- -> IO () #-}
690
+ -> IO Credits #-}
691
691
-- | Supply the given amount of credits to a merging run. This /may/ cause an
692
692
-- ongoing merge to progress.
693
693
supplyCredits ::
694
694
forall m h . (MonadSTM m , MonadST m , MonadMVar m , MonadMask m )
695
695
=> Ref (MergingRun m h )
696
696
-> CreditThreshold
697
697
-> Credits
698
- -> m ()
698
+ -> m Credits
699
699
supplyCredits (DeRef mrun@ MergingRun {mergeKnownCompleted})
700
700
! creditBatchThreshold ! credits = do
701
701
mergeCompleted <- readMutVar mergeKnownCompleted
702
702
case mergeCompleted of
703
- MergeKnownCompleted -> pure ()
703
+ MergeKnownCompleted -> pure credits
704
704
MergeMaybeCompleted -> supplyCredits' mrun creditBatchThreshold credits
705
705
706
706
{-# SPECIALISE supplyCredits' ::
707
707
MergingRun IO h
708
708
-> CreditThreshold
709
709
-> Credits
710
- -> IO () #-}
710
+ -> IO Credits #-}
711
711
supplyCredits' ::
712
712
forall m h . (MonadSTM m , MonadST m , MonadMVar m , MonadMask m )
713
713
=> MergingRun m h
714
714
-> CreditThreshold
715
715
-> Credits
716
- -> m ()
716
+ -> m Credits
717
717
supplyCredits' MergingRun {
718
718
mergeNumEntries,
719
719
mergeCreditsVar,
@@ -763,6 +763,8 @@ supplyCredits' MergingRun {
763
763
-- completion, then that is fine. The next supplyCredits will
764
764
-- complete the merge.
765
765
when weFinishedMerge $ completeMerge mergeState mergeKnownCompleted
766
+ -- We reliably know the credits we supplied that were left over.
767
+ return leftoverCredits
766
768
767
769
| unspentCredits >= batchThreshold -> do
768
770
-- If the unspent credits have reached the threshold then we will try
@@ -784,10 +786,14 @@ supplyCredits' MergingRun {
784
786
-- completion, then that is fine. The next supplyCredits will
785
787
-- complete the merge.
786
788
when weFinishedMerge $ completeMerge mergeState mergeKnownCompleted
789
+ -- We didn't finish, so can be no leftover credits
790
+ assert (leftoverCredits == 0 ) $ pure (Credits 0 )
787
791
788
792
-- Otherwise just accumulate credits (which we did already above),
789
793
-- because we are not over the threshold yet.
790
- | otherwise -> pure ()
794
+ | otherwise ->
795
+ -- We didn't finish, so can be no leftover credits
796
+ assert (leftoverCredits == 0 ) $ pure (Credits 0 )
791
797
792
798
{-# SPECIALISE performMergeSteps ::
793
799
StrictMVar IO (MergingRunState IO h)
0 commit comments