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.
This commit is contained in:
@@ -637,11 +637,11 @@ static int print_traces(private_leak_detective_t *this,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
INIT(entry,
|
INIT(entry,
|
||||||
.backtrace = hdr->backtrace,
|
.backtrace = hdr->backtrace->clone(hdr->backtrace),
|
||||||
.bytes = hdr->bytes,
|
.bytes = hdr->bytes,
|
||||||
.count = 1,
|
.count = 1,
|
||||||
);
|
);
|
||||||
entries->put(entries, hdr->backtrace, entry);
|
entries->put(entries, entry->backtrace, entry);
|
||||||
}
|
}
|
||||||
leaks++;
|
leaks++;
|
||||||
}
|
}
|
||||||
@@ -655,6 +655,7 @@ static int print_traces(private_leak_detective_t *this,
|
|||||||
entry->bytes, entry->count, entry->bytes / entry->count);
|
entry->bytes, entry->count, entry->bytes / entry->count);
|
||||||
entry->backtrace->log(entry->backtrace, out, detailed);
|
entry->backtrace->log(entry->backtrace, out, detailed);
|
||||||
}
|
}
|
||||||
|
entry->backtrace->destroy(entry->backtrace);
|
||||||
free(entry);
|
free(entry);
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
|
|||||||
Reference in New Issue
Block a user