| version 1.170, 2008/10/15 08:13:17 |
version 1.170.4.1, 2008/11/17 18:46:11 |
| Line 2528 pool_cache_put_slow(pool_cache_cpu_t *cc |
|
| Line 2528 pool_cache_put_slow(pool_cache_cpu_t *cc |
|
| KASSERT(cc->cc_previous->pcg_avail == cc->cc_previous->pcg_size); |
KASSERT(cc->cc_previous->pcg_avail == cc->cc_previous->pcg_size); |
| |
|
| pc = cc->cc_cache; |
pc = cc->cc_cache; |
| |
pcg = NULL; |
| cc->cc_misses++; |
cc->cc_misses++; |
| |
|
| |
/* |
| |
* If there are no empty groups in the cache then allocate one |
| |
* while still unlocked. |
| |
*/ |
| |
if (__predict_false(pc->pc_emptygroups == NULL)) { |
| |
if (__predict_true(!pool_cache_disable)) { |
| |
pcg = pool_get(pc->pc_pcgpool, PR_NOWAIT); |
| |
} |
| |
if (__predict_true(pcg != NULL)) { |
| |
pcg->pcg_avail = 0; |
| |
pcg->pcg_size = pc->pc_pcgsize; |
| |
} |
| |
} |
| |
|
| /* Lock the cache. */ |
/* Lock the cache. */ |
| if (__predict_false(!mutex_tryenter(&pc->pc_lock))) { |
if (__predict_false(!mutex_tryenter(&pc->pc_lock))) { |
| ncsw = curlwp->l_ncsw; |
ncsw = curlwp->l_ncsw; |
| Line 2542 pool_cache_put_slow(pool_cache_cpu_t *cc |
|
| Line 2557 pool_cache_put_slow(pool_cache_cpu_t *cc |
|
| */ |
*/ |
| if (__predict_false(curlwp->l_ncsw != ncsw)) { |
if (__predict_false(curlwp->l_ncsw != ncsw)) { |
| mutex_exit(&pc->pc_lock); |
mutex_exit(&pc->pc_lock); |
| |
if (pcg != NULL) { |
| |
pool_put(pc->pc_pcgpool, pcg); |
| |
} |
| return true; |
return true; |
| } |
} |
| } |
} |
| |
|
| /* If there are no empty groups in the cache then allocate one. */ |
/* If there are no empty groups in the cache then allocate one. */ |
| if (__predict_false((pcg = pc->pc_emptygroups) == NULL)) { |
if (pcg == NULL && pc->pc_emptygroups != NULL) { |
| if (__predict_true(!pool_cache_disable)) { |
pcg = pc->pc_emptygroups; |
| pcg = pool_get(pc->pc_pcgpool, PR_NOWAIT); |
|
| } |
|
| if (__predict_true(pcg != NULL)) { |
|
| pcg->pcg_avail = 0; |
|
| pcg->pcg_size = pc->pc_pcgsize; |
|
| } |
|
| } else { |
|
| pc->pc_emptygroups = pcg->pcg_next; |
pc->pc_emptygroups = pcg->pcg_next; |
| pc->pc_nempty--; |
pc->pc_nempty--; |
| } |
} |