]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Simplify static checker's job for i_free() macro.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 5 Oct 2016 11:22:03 +0000 (14:22 +0300)
committerGitLab <gitlab@git.dovecot.net>
Wed, 5 Oct 2016 21:13:36 +0000 (00:13 +0300)
src/lib/imem.h
src/lib/mempool-system.c
src/lib/mempool.h

index ef8b7f483fa657722a0ebcc95fcd23bf29bcd47e..0d35ffcc6e70f6e021d534d9c98928132e5f9fed 100644 (file)
@@ -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 */
index 2cc5d3ae6f6b3ec84c017c225047c9bf19e909af..83029d08e7774722ab7081c86347a1c0bb41e4f4 100644 (file)
@@ -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;
index e473496e13e64f15f555266802a9920f2987b758..7fc52359d324c7f1de4466d5b3d5ad34469c97d3 100644 (file)
@@ -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