aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/utils/leak_detective.c17
1 files 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 <netdb.h>
#include <locale.h>
#include <dlfcn.h>
+#include <time.h>
#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();