From: Timo Sirainen Date: Sun, 21 Sep 2003 16:39:29 +0000 (+0300) Subject: Make i_free(), p_free() and pool_unref() calls also set the given parameter X-Git-Tag: 1.1.alpha1~4322 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c71a9c4d81b80083c13f908162515142b951ecf4;p=thirdparty%2Fdovecot%2Fcore.git Make i_free(), p_free() and pool_unref() calls also set the given parameter to NULL. --HG-- branch : HEAD --- diff --git a/src/lib/imem.c b/src/lib/imem.c index bda3c6dbf4..05412e7bb9 100644 --- a/src/lib/imem.c +++ b/src/lib/imem.c @@ -9,11 +9,6 @@ void *i_malloc(size_t size) return p_malloc(default_pool, size); } -void i_free(void *mem) -{ - p_free(default_pool, mem); -} - void *i_realloc(void *mem, size_t old_size, size_t new_size) { return p_realloc(default_pool, mem, old_size, new_size); diff --git a/src/lib/imem.h b/src/lib/imem.h index 1ef6887336..fc70c915b9 100644 --- a/src/lib/imem.h +++ b/src/lib/imem.h @@ -6,10 +6,16 @@ extern pool_t default_pool; /* For easy allocation of memory from default memory pool. */ #define i_new(type, count) \ ((type *) i_malloc(sizeof(type) * (count))) + void *i_malloc(size_t size); -void i_free(void *mem); void *i_realloc(void *mem, size_t old_size, size_t new_size); +#define i_free(mem) \ + STMT_START { \ + p_free(default_pool, mem); \ + (mem) = NULL; \ + } STMT_END + /* string functions */ char *i_strdup(const char *str); char *i_strdup_empty(const char *str); /* like i_strdup(), but if str == "", return NULL */ diff --git a/src/lib/mempool.h b/src/lib/mempool.h index 179fa664b8..73b47a40e9 100644 --- a/src/lib/mempool.h +++ b/src/lib/mempool.h @@ -49,22 +49,24 @@ pool_t pool_datastack_create(void); /* Pools should be used through these macros: */ #define pool_get_name(pool) (pool)->get_name(pool) #define pool_ref(pool) (pool)->ref(pool) -#define pool_unref(pool) (pool)->unref(pool) +#define pool_unref(pool) \ + STMT_START { \ + (pool)->unref(pool); \ + (pool) = NULL; \ + } STMT_END + +#define p_new(pool, type, count) \ + ((type *) p_malloc(pool, sizeof(type) * (count))) #define p_malloc(pool, size) (pool)->malloc(pool, size) #define p_realloc(pool, mem, old_size, new_size) \ (pool)->realloc(pool, mem, old_size, new_size) -#define p_free(pool, mem) (pool)->free(pool, mem) - -#define p_clear(pool) (pool)->clear(pool) - -/* Extra macros to make life easier: */ -#define p_new(pool, type, count) \ - ((type *) p_malloc(pool, sizeof(type) * (count))) -#define p_free_and_null(pool, rec) \ +#define p_free(pool, mem) \ STMT_START { \ - p_free(pool, rec); \ - (rec) = NULL; \ + (pool)->free(pool, mem); \ + (mem) = NULL; \ } STMT_END +#define p_clear(pool) (pool)->clear(pool) + #endif