diff --git a/libutils/cleanup.c b/libutils/cleanup.c index e8316775..eec6f6a4 100644 --- a/libutils/cleanup.c +++ b/libutils/cleanup.c @@ -72,3 +72,20 @@ void RegisterCleanupFunction(CleanupFn fn) pthread_mutex_unlock(&cleanup_functions_mutex); } +void ClearCleanupFunctions(void) +{ + pthread_mutex_lock(&cleanup_functions_mutex); + + CleanupList *p = cleanup_functions; + while (p) + { + CleanupList *cur = p; + p = cur->next; + free(cur); + } + + cleanup_functions = NULL; + + pthread_mutex_unlock(&cleanup_functions_mutex); +} + diff --git a/libutils/cleanup.h b/libutils/cleanup.h index 8cd59e0a..f71bb4fe 100644 --- a/libutils/cleanup.h +++ b/libutils/cleanup.h @@ -30,4 +30,9 @@ void CallCleanupFunctions(void); void DoCleanupAndExit(int ret) FUNC_ATTR_NORETURN; void RegisterCleanupFunction(CleanupFn fn); +/** + * Discards all currently registered cleanup functions without calling them. + */ +void ClearCleanupFunctions(void); + #endif