Minor fixes to comments.
[AROS.git] / rom / exec / deletepool.c
blob1bc61c50851e1028e61fe6a7f05b5344b4e1eca5
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Delete a memory pool including all its memory.
6 Lang: english
7 */
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"
15 #include "memory.h"
16 #include "mungwall.h"
18 /*****************************************************************************
20 NAME */
22 AROS_LH1(void, DeletePool,
24 /* SYNOPSIS */
25 AROS_LHA(APTR, poolHeader, A0),
27 /* LOCATION */
28 struct ExecBase *, SysBase, 117, Exec)
30 /* FUNCTION
31 Delete a pool including all it's memory.
33 INPUTS
34 poolHeader - The pool allocated with CreatePool() or NULL.
36 RESULT
38 NOTES
40 EXAMPLE
42 BUGS
44 SEE ALSO
45 CreatePool(), AllocPooled(), FreePooled()
47 INTERNALS
49 ******************************************************************************/
51 AROS_LIBFUNC_INIT
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 TraceLocation tp = CURRENT_LOCATION("DeletePool");
61 struct Pool *pool = poolHeader + MEMHEADER_TOTAL;
62 struct Node *p, *p2; /* Avoid casts */
64 D(bug("[DeletePool] Pool header 0x%p\n", pool));
67 * We are going to deallocate the whole pool.
68 * Scan mungwall's allocations list and remove all chunks belonging to the pool.
70 MungWall_Scan(pool, &tp, SysBase);
73 * Free the list of puddles.
74 * Remember that initial puddle containing the pool structure is also in this list.
75 * We do not need to free it until everything else is freed.
77 for (p = (struct Node *)pool->PuddleList.mlh_Head; p->ln_Succ; p = p2)
79 p2 = p->ln_Succ;
81 D(bug("[DeletePool] Puddle 0x%p...", p));
83 if (p != poolHeader)
85 D(bug(" freeing"));
86 FreeMemHeader(p, &tp, SysBase);
88 D(bug("\n"));
91 /* Free the last puddle, containing the pool header */
92 D(bug("[DeletePool] Freeing initial puddle 0x%p\n", poolHeader));
93 FreeMemHeader(poolHeader, &tp, SysBase);
96 AROS_LIBFUNC_EXIT
97 } /* DeletePool */