From a629da83391d58813cc962f6c52d991868b10e3a Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sun, 14 Nov 2010 23:15:16 +0100 Subject: [PATCH] Memleak: free the list of search hooks on exit --- citadel/serv_extensions.c | 13 +++++++++++++ citadel/serv_extensions.h | 2 ++ citadel/sysdep.c | 1 + 3 files changed, 16 insertions(+) diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index a35fa1bcf..e23772e96 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -893,6 +893,19 @@ void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), } } +void CtdlDestroySearchHooks(void) +{ + struct SearchFunctionHook *cur, *p; + + cur = SearchFunctionHookTable; + SearchFunctionHookTable = NULL; + while (cur != NULL) { + p = cur->next; + free(cur); + cur = p; + } +} + void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, const char *search_string, const char *func_name) { struct SearchFunctionHook *fcn = NULL; diff --git a/citadel/serv_extensions.h b/citadel/serv_extensions.h index 6cca652aa..b2d556377 100644 --- a/citadel/serv_extensions.h +++ b/citadel/serv_extensions.h @@ -194,6 +194,8 @@ void CtdlDestroyProtoHooks(void); void CtdlDestroyServiceHook(void); +void CtdlDestroySearchHooks(void); + void CtdlDestroyFixedOutputHooks(void); int PerformFixedOutputHooks(char *, char *, int); diff --git a/citadel/sysdep.c b/citadel/sysdep.c index 2e43b66bb..8ead78e0a 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -1051,6 +1051,7 @@ void sysdep_master_cleanup(void) { CtdlDestroySessionHooks(); CtdlDestroyServiceHook(); CtdlDestroyRoomHooks(); + CtdlDestroySearchHooks(); #ifdef HAVE_BACKTRACE /// eCrash_Uninit(); #endif -- 2.30.2