From: Timo Sirainen Date: Wed, 5 Oct 2016 11:22:03 +0000 (+0300) Subject: lib: Simplify static checker's job for i_free() macro. X-Git-Tag: 2.3.0.rc1~2948 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ceace05582699dd86d6b41a20b87b1272b33352b;p=thirdparty%2Fdovecot%2Fcore.git lib: Simplify static checker's job for i_free() macro. --- diff --git a/src/lib/imem.h b/src/lib/imem.h index ef8b7f483f..0d35ffcc6e 100644 --- a/src/lib/imem.h +++ b/src/lib/imem.h @@ -13,7 +13,15 @@ void *i_realloc(void *mem, size_t old_size, size_t new_size) /* i_free() and i_free_and_null() are now guaranteed to both set mem=NULL, so either one of them can be used. */ -#define i_free(mem) p_free_and_null(default_pool, mem) +#ifndef STATIC_CHECKER +# define i_free(mem) p_free_and_null(default_pool, mem) +#else +# define i_free(mem) \ + STMT_START { \ + pool_system_free(default_pool, mem); \ + (mem) = NULL; \ + } STMT_END +#endif #define i_free_and_null(mem) i_free(mem) /* string functions */ diff --git a/src/lib/mempool-system.c b/src/lib/mempool-system.c index 2cc5d3ae6f..83029d08e7 100644 --- a/src/lib/mempool-system.c +++ b/src/lib/mempool-system.c @@ -26,7 +26,6 @@ static const char *pool_system_get_name(pool_t pool); static void pool_system_ref(pool_t pool); static void pool_system_unref(pool_t *pool); static void *pool_system_malloc(pool_t pool, size_t size); -static void pool_system_free(pool_t pool, void *mem); static void *pool_system_realloc(pool_t pool, void *mem, size_t old_size, size_t new_size); static void pool_system_clear(pool_t pool); @@ -95,8 +94,7 @@ static void *pool_system_malloc(pool_t pool ATTR_UNUSED, size_t size) return mem; } -static void pool_system_free(pool_t pool ATTR_UNUSED, - void *mem ATTR_UNUSED) +void pool_system_free(pool_t pool ATTR_UNUSED, void *mem ATTR_UNUSED) { #ifdef DEBUG int old_errno = errno; diff --git a/src/lib/mempool.h b/src/lib/mempool.h index e473496e13..7fc52359d3 100644 --- a/src/lib/mempool.h +++ b/src/lib/mempool.h @@ -128,4 +128,7 @@ size_t pool_alloconly_get_total_used_size(pool_t pool); /* Returns how much system memory has been allocated for this pool. */ size_t pool_alloconly_get_total_alloc_size(pool_t pool); +/* private: */ +void pool_system_free(pool_t pool, void *mem); + #endif