diff --git a/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c b/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c index 758f46762b..1e27d51f6c 100644 --- a/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c +++ b/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c @@ -929,7 +929,7 @@ int su_home_init(su_home_t *home) return 0; } - +#define safe_free(it) if (it) { free(it); it = NULL; } /** Internal deinitialization */ static void _su_home_deinit(su_home_t *home) @@ -965,16 +965,17 @@ void _su_home_deinit(su_home_t *home) } else if (su_is_preloaded(b, b->sub_nodes[i].sua_data)) continue; - free(b->sub_nodes[i].sua_data); + safe_free(b->sub_nodes[i].sua_data); + } } if (b->sub_preload && !b->sub_preauto) - free(b->sub_preload); + safe_free(b->sub_preload); if (b->sub_stats) - free(b->sub_stats); + safe_free(b->sub_stats); if (!b->sub_auto) - free(b); + safe_free(b); home->suh_blocks = NULL;