From: Jens Axboe Date: Wed, 16 Apr 2008 17:51:46 +0000 (+0200) Subject: smalloc: cleanups and allow sfree(NULL) X-Git-Tag: fio-1.20~3 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=8e5732e558509fc0f4ccdeb1e4d01ad038aead06 smalloc: cleanups and allow sfree(NULL) Signed-off-by: Jens Axboe --- diff --git a/smalloc.c b/smalloc.c index 8d1193ab..7e6c4f8f 100644 --- a/smalloc.c +++ b/smalloc.c @@ -336,6 +336,9 @@ void sfree(void *ptr) struct pool *pool = NULL; unsigned int i; + if (!ptr) + return; + global_read_lock(); for (i = 0; i < nr_pools; i++) { @@ -357,14 +360,14 @@ static void *smalloc_pool(struct pool *pool, unsigned int size) int did_restart = 0; void *ret; - /* - * slight chance of race with sfree() here, but acceptable - */ - if (!size || size > pool->room + sizeof(*hdr) || - ((size > pool->largest_block) && pool->largest_block)) + if (!size) return NULL; pool_lock(pool); + if (size > pool->room + sizeof(*hdr)) + goto fail; + if ((size > pool->largest_block) && pool->largest_block) + goto fail; restart: hdr = pool->last; prv = NULL;