aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-07-10 17:15:00 +0200
committerMartin Willi <martin@revosec.ch>2013-07-10 17:28:24 +0200
commitf960b39061657eb0d06bd82b65078a0a3d7d896a (patch)
treed69f926ce4d377ddb57dc234af08d820fd703a02
parentd9c459e8557da4650dd5df7ceb6ccf468e923541 (diff)
downloadstrongswan-f960b39061657eb0d06bd82b65078a0a3d7d896a.tar.bz2
strongswan-f960b39061657eb0d06bd82b65078a0a3d7d896a.tar.xz
leak-detective: take a copy of backtrace while printing traces
As we don't want to hold the lock, we must make sure backtraces keep valid while printing them.
-rw-r--r--src/libstrongswan/utils/leak_detective.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/libstrongswan/utils/leak_detective.c b/src/libstrongswan/utils/leak_detective.c
index aa2447260..b2c644ae1 100644
--- a/src/libstrongswan/utils/leak_detective.c
+++ b/src/libstrongswan/utils/leak_detective.c
@@ -637,11 +637,11 @@ static int print_traces(private_leak_detective_t *this,
else
{
INIT(entry,
- .backtrace = hdr->backtrace,
+ .backtrace = hdr->backtrace->clone(hdr->backtrace),
.bytes = hdr->bytes,
.count = 1,
);
- entries->put(entries, hdr->backtrace, entry);
+ entries->put(entries, entry->backtrace, entry);
}
leaks++;
}
@@ -655,6 +655,7 @@ static int print_traces(private_leak_detective_t *this,
entry->bytes, entry->count, entry->bytes / entry->count);
entry->backtrace->log(entry->backtrace, out, detailed);
}
+ entry->backtrace->destroy(entry->backtrace);
free(entry);
}
enumerator->destroy(enumerator);