2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
5 Desc: Delete a memory pool including all its memory.
9 #include <aros/libcall.h>
10 #include <exec/memory.h>
11 #include <proto/exec.h>
13 #include "exec_intern.h"
14 #include "exec_util.h"
18 /*****************************************************************************
22 AROS_LH1(void, DeletePool
,
25 AROS_LHA(APTR
, poolHeader
, A0
),
28 struct ExecBase
*, SysBase
, 117, Exec
)
31 Delete a pool including all it's memory.
34 poolHeader - The pool allocated with CreatePool() or NULL.
45 CreatePool(), AllocPooled(), FreePooled()
49 ******************************************************************************/
53 ASSERT_VALID_PTR_OR_NULL(poolHeader
);
55 D(bug("[exec] DeletePool(0x%p)\n", poolHeader
));
57 /* It is legal to DeletePool(NULL) */
58 if (poolHeader
!= NULL
)
60 struct Pool
*pool
= poolHeader
+ MEMHEADER_TOTAL
;
61 struct Node
*p
, *p2
; /* Avoid casts */
63 D(bug("[DeletePool] Pool header 0x%p\n", pool
));
66 * We are going to deallocate the whole pool.
67 * Scan mungwall's allocations list and remove all chunks
68 * belonging to the pool.
69 * For mungwall we provide also called function name, return address and caller's stack frame.
70 * This will be displayed in alerts.
72 MungWall_Scan(pool
, "DeletePool", __builtin_return_address(0), CALLER_FRAME
, SysBase
);
75 * Free the list of puddles.
76 * Remember that initial puddle containing the pool structure is also in this list.
77 * We do not need to free it until everything else is freed.
79 for (p
= (struct Node
*)pool
->PuddleList
.mlh_Head
; p
->ln_Succ
; p
= p2
)
83 D(bug("[DeletePool] Puddle 0x%p...", p
));
88 FreeMemHeader(p
, SysBase
);
93 /* Free the last puddle, containing the pool header */
94 D(bug("[DeletePool] Freeing initial puddle 0x%p\n", poolHeader
));
95 FreeMemHeader(poolHeader
, SysBase
);