whitelisted FCGX_Init
reporting count of leaks suppressed by whitelist
This commit is contained in:
@@ -230,6 +230,7 @@ char *whitelist[] = {
|
|||||||
"mysql_init_character_set",
|
"mysql_init_character_set",
|
||||||
"init_client_errs",
|
"init_client_errs",
|
||||||
"my_thread_init",
|
"my_thread_init",
|
||||||
|
"FCGX_Init",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -265,11 +266,15 @@ static bool is_whitelisted(void **stack_frames, int stack_frame_count)
|
|||||||
void report_leaks()
|
void report_leaks()
|
||||||
{
|
{
|
||||||
memory_header_t *hdr;
|
memory_header_t *hdr;
|
||||||
int leaks = 0;
|
int leaks = 0, whitelisted = 0;
|
||||||
|
|
||||||
for (hdr = first_header.next; hdr != NULL; hdr = hdr->next)
|
for (hdr = first_header.next; hdr != NULL; hdr = hdr->next)
|
||||||
{
|
{
|
||||||
if (!is_whitelisted(hdr->stack_frames, hdr->stack_frame_count))
|
if (is_whitelisted(hdr->stack_frames, hdr->stack_frame_count))
|
||||||
|
{
|
||||||
|
whitelisted++;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Leak (%d bytes at %p):\n", hdr->bytes, hdr + 1);
|
fprintf(stderr, "Leak (%d bytes at %p):\n", hdr->bytes, hdr + 1);
|
||||||
/* skip the first frame, contains leak detective logic */
|
/* skip the first frame, contains leak detective logic */
|
||||||
@@ -281,15 +286,16 @@ void report_leaks()
|
|||||||
switch (leaks)
|
switch (leaks)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
fprintf(stderr, "No leaks detected\n");
|
fprintf(stderr, "No leaks detected");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
fprintf(stderr, "One leak detected\n");
|
fprintf(stderr, "One leak detected");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%d leaks detected\n", leaks);
|
fprintf(stderr, "%d leaks detected", leaks);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, ", %d suppressed by whitelist\n", whitelisted);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user