pragma Debug (Trace_Usage (9, P'Unchecked_Access, "Stop")); Used := Now - P.Last_Usage_Update_Time; pragma Assert (Used >= 0); P.Usage := P.Usage + Used; R := P.R_Queue.Front_Of; pragma Debug (Check_Usage (3, P'Unchecked_Access, R.R_Amount, "Suspend")); if P.T.Is_Suspended then -- Compute the replenishment. P.R_Queue.Pop; if P.Usage < R.R_Amount then -- Split the chunk. -- R2 is the unused part. R2.R_Amount := R.R_Amount - P.Usage; R2.R_Time := R.R_Time; Trace (0, "R.R_time = " & Time'Image (R.R_Time)); P.R_Queue.Add (R2); end if; -- R is the used part. R.R_Amount := P.Usage; R.R_Time := P.T.Priority; P.R_Queue.Add (R); P.Usage := 0; -- Check for new chunks R := P.R_Queue.Front_Of; P.T.Priority := R.R_Time + P.Parms.Budget_Interval; if R > Now then -- Schedule a replenishment event. end if; pragma Debug (Check_R_Sum (P.R_Queue, P.Parms.Budget, "Suspend")); end if;