diff options
author | Martin Willi <martin@revosec.ch> | 2013-07-10 17:15:00 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-07-10 17:28:24 +0200 |
commit | f960b39061657eb0d06bd82b65078a0a3d7d896a (patch) | |
tree | d69f926ce4d377ddb57dc234af08d820fd703a02 | |
parent | d9c459e8557da4650dd5df7ceb6ccf468e923541 (diff) | |
download | strongswan-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.c | 5 |
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); |