summaryrefslogtreecommitdiff
path: root/sys/man
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2023-04-08 20:24:44 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2023-04-08 20:24:44 +0000
commitbd43bd6f1ae1b1ec7ee6873d9fd6766b049802e9 (patch)
tree6b846a12ebf42feaf394de84ab663d6c3314d984 /sys/man
parent26e42d115979009c9fe144e1c28f740485537674 (diff)
libc: Add poolreset() function
This is intended for the secrmem pool in the kernel, but could also be used for temporary pools to recover the memory used by the arenas.
Diffstat (limited to 'sys/man')
-rw-r--r--sys/man/2/pool23
1 files changed, 21 insertions, 2 deletions
diff --git a/sys/man/2/pool b/sys/man/2/pool
index 1360484e9..20636fad5 100644
--- a/sys/man/2/pool
+++ b/sys/man/2/pool
@@ -28,6 +28,9 @@ ulong poolmsize(Pool* pool, void* ptr)
int poolisoverlap(Pool* pool, void* ptr, ulong len)
.PP
.B
+void poolreset(Pool* pool)
+.PP
+.B
void* poolrealloc(Pool* pool, void* ptr, ulong size)
.PP
.B
@@ -119,6 +122,18 @@ overlaps the arenas of the specified
.BR pool ,
returning non-zero when there is overlap or zero if none.
.PP
+.I Poolreset
+clears the pool counters and frees all arenas.
+The arenas are filled with a pattern before
+freeing them when the
+.B POOL_ANTAGONISM
+flag is set.
+When the
+.B free
+function of the pool is non-nil,
+it is called for each arena,
+passing its pointer and size.
+.PP
The
.I poolblockcheck
and
@@ -156,6 +171,7 @@ struct Pool {
void* (*alloc)(ulong);
int (*merge)(void*, void*);
void (*move)(void* from, void* to);
+ void (*free)(void*, ulong);
void (*lock)(Pool*);
void (*unlock)(Pool*);
void (*print)(Pool*, char*, ...);
@@ -279,12 +295,15 @@ Specifically, each 32-bit word of the memory is marked with a pointer value excl
with a constant.
The pointer value is the pointer to the beginning of the allocated block
and the constant varies in order to distinguish different markings.
-Freed blocks use the constant
+Freed blocks use the constant
.BR 0xF7000000 ,
newly allocated blocks
.BR 0xF9000000 ,
and newly created unallocated blocks
-.BR 0xF1000000 .
+.BR 0xF1000000 ,
+freed arenas after
+.I poolreset
+.BR 0xFF000000 .
For example, if
.B POOL_ANTAGONISM
is set and