*/
static int print_traces(private_leak_detective_t *this,
FILE *out, int thresh, int thresh_count,
- bool detailed, int *whitelisted)
+ bool detailed, int *whitelisted, size_t *sum)
{
int leaks = 0;
memory_header_t *hdr;
);
entries->put(entries, entry->backtrace, entry);
}
+ if (sum)
+ {
+ *sum += hdr->bytes;
+ }
leaks++;
}
lock->unlock(lock);
if (lib->leak_detective)
{
int leaks, whitelisted = 0;
+ size_t sum = 0;
- leaks = print_traces(this, stderr, 0, 0, detailed, &whitelisted);
+ leaks = print_traces(this, stderr, 0, 0, detailed, &whitelisted, &sum);
switch (leaks)
{
case 0:
fprintf(stderr, "One leak detected");
break;
default:
- fprintf(stderr, "%d leaks detected", leaks);
+ fprintf(stderr, "%d leaks detected, %zu bytes", leaks, sum);
break;
}
fprintf(stderr, ", %d suppressed by whitelist\n", whitelisted);
{
int leaks, whitelisted = 0;
- leaks = print_traces(this, NULL, 0, 0, FALSE, &whitelisted);
+ leaks = print_traces(this, NULL, 0, 0, FALSE, &whitelisted, NULL);
return leaks;
}
return 0;
{
bool detailed;
int thresh, thresh_count;
+ size_t sum = 0;
thresh = lib->settings->get_int(lib->settings,
"libstrongswan.leak_detective.usage_threshold", 10240);
detailed = lib->settings->get_bool(lib->settings,
"libstrongswan.leak_detective.detailed", TRUE);
- print_traces(this, out, thresh, thresh_count, detailed, NULL);
+ print_traces(this, out, thresh, thresh_count, detailed, NULL, &sum);
+
+ fprintf(out, "Total memory usage: %zu\n", sum);
}
/**