Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/kern/subr_pool.c,v retrieving revision 1.112.6.1 retrieving revision 1.112.6.2 diff -u -p -r1.112.6.1 -r1.112.6.2 --- src/sys/kern/subr_pool.c 2006/03/28 09:42:26 1.112.6.1 +++ src/sys/kern/subr_pool.c 2006/05/24 15:50:41 1.112.6.2 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_pool.c,v 1.112.6.1 2006/03/28 09:42:26 tron Exp $ */ +/* $NetBSD: subr_pool.c,v 1.112.6.2 2006/05/24 15:50:41 tron Exp $ */ /*- * Copyright (c) 1997, 1999, 2000 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.112.6.1 2006/03/28 09:42:26 tron Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.112.6.2 2006/05/24 15:50:41 tron Exp $"); #include "opt_pool.h" #include "opt_poollog.h" @@ -468,13 +468,27 @@ void pool_init(struct pool *pp, size_t size, u_int align, u_int ioff, int flags, const char *wchan, struct pool_allocator *palloc) { - int off, slack; +#ifdef DEBUG + struct pool *pp1; +#endif size_t trysize, phsize; - int s; + int off, slack, s; KASSERT((1UL << (CHAR_BIT * sizeof(pool_item_freelist_t))) - 2 >= PHPOOL_FREELIST_NELEM(PHPOOL_MAX - 1)); +#ifdef DEBUG + /* + * Check that the pool hasn't already been initialised and + * added to the list of all pools. + */ + LIST_FOREACH(pp1, &pool_head, pr_poollist) { + if (pp == pp1) + panic("pool_init: pool %s already initialised", + wchan); + } +#endif + #ifdef POOL_DIAGNOSTIC /* * Always log if POOL_DIAGNOSTIC is defined. @@ -1220,7 +1234,6 @@ pool_grow(struct pool *pp, int flags) simple_lock(&pp->pr_slock); pool_prime_page(pp, cp, ph); pp->pr_npagealloc++; - pp->pr_minpages++; return 0; } @@ -1530,7 +1543,8 @@ pool_drain(void *arg) drainpp = LIST_NEXT(pp, pr_poollist); } simple_unlock(&pool_head_slock); - pool_reclaim(pp); + if (pp) + pool_reclaim(pp); splx(s); }