procedure Finalize_Pool (Pool : in out Root_Storage_Pool_With_Subpools) is
Curr_Ptr : SP_Node_Ptr;
Ex_Occur : Exception_Occurrence;
+ Handle : Subpool_Handle;
Raised : Boolean := False;
function Is_Empty_List (L : not null SP_Node_Ptr) return Boolean;
while not Is_Empty_List (Pool.Subpools'Unchecked_Access) loop
Curr_Ptr := Pool.Subpools.Next;
- -- Perform the following actions:
-
- -- 1) Finalize all objects chained on the subpool's collection
- -- 2) Remove the subpool from the owner's list of subpools
- -- 3) Deallocate the doubly linked list node associated with the
- -- subpool.
- -- 4) Call Deallocate_Subpool
+ -- Finalize and deallocate the subpool. Beware that the node pointed
+ -- to by Curr_Ptr will be deallocated so may not be passed as actual
+ -- in the call, since the formal parameter is In Out.
begin
- Finalize_And_Deallocate (Curr_Ptr.Subpool);
+ Handle := Curr_Ptr.Subpool;
+ Finalize_And_Deallocate (Handle);
exception
when Fin_Occur : others =>