add hooks for malloc/free to mpool, add (no-op) purge function
We will need this to hook the resourcecollector in
This commit is contained in:
parent
b60d8aa907
commit
9feb01e4fe
2 changed files with 33 additions and 3 deletions
|
|
@ -37,10 +37,15 @@
|
|||
#define MPOOL_C(c) c ## UL
|
||||
#endif
|
||||
|
||||
/*
|
||||
defaults for the hooks, used when creating mpools
|
||||
*/
|
||||
void *(*mpool_malloc_hook)(size_t size) = malloc;
|
||||
void (*mpool_free_hook)(void *ptr) = free;
|
||||
|
||||
/*
|
||||
Cluster and node structures are private
|
||||
*/
|
||||
|
||||
typedef struct mpoolcluster_struct mpoolcluster;
|
||||
typedef mpoolcluster* MPoolcluster;
|
||||
typedef const mpoolcluster* const_MPoolcluster;
|
||||
|
|
@ -94,6 +99,9 @@ mpool_init (MPool self, size_t elem_size, unsigned elements_per_cluster, mpool_d
|
|||
self->elements_free = 0;
|
||||
self->destroy = dtor;
|
||||
self->locality = NULL;
|
||||
|
||||
self->malloc_hook = mpool_malloc_hook;
|
||||
self->free_hook = mpool_free_hook;
|
||||
}
|
||||
|
||||
return self;
|
||||
|
|
@ -144,7 +152,7 @@ mpool_destroy (MPool self)
|
|||
|
||||
llist_unlink_fast_ (cluster);
|
||||
TRACE (mpool_dbg, "freeing cluster %p" , cluster);
|
||||
free (cluster);
|
||||
self->free_hook (cluster);
|
||||
}
|
||||
|
||||
llist_init (&self->freelist);
|
||||
|
|
@ -156,11 +164,19 @@ mpool_destroy (MPool self)
|
|||
}
|
||||
|
||||
|
||||
MPool
|
||||
mpool_purge (MPool self)
|
||||
{
|
||||
// not UNIMPLEMENTED because valid no-op
|
||||
PLANNED("To be implemented");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
MPool
|
||||
mpool_cluster_alloc_ (MPool self)
|
||||
{
|
||||
MPoolcluster cluster = malloc (self->cluster_size);
|
||||
MPoolcluster cluster = self->malloc_hook (self->cluster_size);
|
||||
TRACE (mpool_dbg, "%p", cluster);
|
||||
|
||||
if (!cluster)
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@ struct mpool_struct
|
|||
unsigned elements_free; /* a counter of free elements is the price we pay to support a reserve() operation */
|
||||
void* locality;
|
||||
mpool_destroy_fn destroy;
|
||||
void *(*malloc_hook)(size_t);
|
||||
void (*free_hook)(void *);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -128,6 +130,18 @@ mpool_init (MPool self, size_t elem_size, unsigned elements_per_cluster, mpool_d
|
|||
MPool
|
||||
mpool_destroy (MPool self);
|
||||
|
||||
/*
|
||||
//index.mpool_purge xref:mpool_purge[mpool_purge()]:: free unused clusters
|
||||
//mpool [[mpool_purge]]
|
||||
//mpool .mpool_purge
|
||||
//mpool
|
||||
//mpool TODO
|
||||
//mpool
|
||||
//mpool
|
||||
*/
|
||||
MPool
|
||||
mpool_purge (MPool self);
|
||||
|
||||
|
||||
/*
|
||||
//index.mpool_available xref:mpool_available[mpool_available()]:: query number of free elements
|
||||
|
|
|
|||
Loading…
Reference in a new issue