| version 1.128.2.9, 2007/09/10 11:13:17 |
version 1.128.2.10, 2007/09/25 01:36:19 |
| Line 1974 pool_cache_bootstrap(pool_cache_t pc, si |
|
| Line 1974 pool_cache_bootstrap(pool_cache_t pc, si |
|
| |
|
| mutex_init(&pc->pc_lock, MUTEX_DEFAULT, pp->pr_ipl); |
mutex_init(&pc->pc_lock, MUTEX_DEFAULT, pp->pr_ipl); |
| |
|
| |
if (ctor == NULL) { |
| |
ctor = (int (*)(void *, void *, int))nullop; |
| |
} |
| |
if (dtor == NULL) { |
| |
dtor = (void (*)(void *, void *))nullop; |
| |
} |
| |
|
| pc->pc_emptygroups = NULL; |
pc->pc_emptygroups = NULL; |
| pc->pc_fullgroups = NULL; |
pc->pc_fullgroups = NULL; |
| pc->pc_ctor = ctor; |
pc->pc_ctor = ctor; |
|
|
| pool_cache_destruct_object(pool_cache_t pc, void *object) |
pool_cache_destruct_object(pool_cache_t pc, void *object) |
| { |
{ |
| |
|
| if (pc->pc_dtor != NULL) |
(*pc->pc_dtor)(pc->pc_arg, object); |
| (*pc->pc_dtor)(pc->pc_arg, object); |
|
| pool_put(&pc->pc_pool, object); |
pool_put(&pc->pc_pool, object); |
| } |
} |
| |
|
| Line 2344 pool_cache_get_slow(pool_cache_cpu_t *cc |
|
| Line 2350 pool_cache_get_slow(pool_cache_cpu_t *cc |
|
| if (object == NULL) |
if (object == NULL) |
| return NULL; |
return NULL; |
| |
|
| if (pc->pc_ctor != NULL) { |
if ((*pc->pc_ctor)(pc->pc_arg, object, flags) != 0) { |
| if ((*pc->pc_ctor)(pc->pc_arg, object, flags) != 0) { |
pool_put(&pc->pc_pool, object); |
| pool_put(&pc->pc_pool, object); |
*objectp = NULL; |
| *objectp = NULL; |
return NULL; |
| return NULL; |
|
| } |
|
| } |
} |
| |
|
| KASSERT((((vaddr_t)object + pc->pc_pool.pr_itemoffset) & |
KASSERT((((vaddr_t)object + pc->pc_pool.pr_itemoffset) & |