From 7e3f6299d5407445393e336f0c53746fafd344d6 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 2 Apr 2013 15:47:55 +0200 Subject: [PATCH] leak-detective: call tzset() explicitly before enabling leak detective tzset() is hard to whitelist on some systems, as there is no symbol involved. Call tzset() explicitly before initialization to avoid false positives. --- src/libstrongswan/utils/leak_detective.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/libstrongswan/utils/leak_detective.c b/src/libstrongswan/utils/leak_detective.c index 69e539d64..2883b88d9 100644 --- a/src/libstrongswan/utils/leak_detective.c +++ b/src/libstrongswan/utils/leak_detective.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "leak_detective.h" @@ -283,12 +284,6 @@ char *whitelist[] = { "pthread_setspecific", "__pthread_setspecific", /* glibc functions */ - "mktime", - "ctime", - "__gmtime_r", - "localtime_r", - "tzset", - "time_printf_hook", "inet_ntoa", "strerror", "getprotobyname", @@ -366,6 +361,14 @@ char *whitelist[] = { "gnutls_global_init", }; +/** + * Some functions are hard to whitelist, as they don't use a symbol directly. + * Use some static initialization to suppress them on leak reports + */ +static void init_static_allocations() +{ + tzset(); +} /** * Hashtable hash function @@ -748,6 +751,8 @@ leak_detective_t *leak_detective_create() lock = spinlock_create(); thread_disabled = thread_value_create(NULL); + init_static_allocations(); + if (getenv("LEAK_DETECTIVE_DISABLE") == NULL) { enable_leak_detective();