Give more information and save log lines in memory leak reports

This commit is contained in:
Zeev Suraski 1999-05-22 11:20:56 +00:00
parent 9b4d71205b
commit 080105f79f
3 changed files with 29 additions and 6 deletions

View file

@ -221,5 +221,6 @@ extern zend_utility_values zend_uv;
#define ZMSG_FAILED_REQUIRE_FOPEN 3L
#define ZMSG_FAILED_HIGHLIGHT_FOPEN 4L
#define ZMSG_MEMORY_LEAK_DETECTED 5L
#define ZMSG_MEMORY_LEAK_REPEATED 6L
#endif /* _ZEND_H */

View file

@ -340,6 +340,11 @@ ZEND_API void start_memory_manager(void)
ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
{
mem_header *p, *t;
#if ZEND_DEBUG
char *last_filename = NULL;
uint last_lineno = 0;
uint leak_count=0, total_bytes=0;
#endif
ALS_FETCH();
p=AG(head);
@ -348,10 +353,23 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
if (!t->cached || clean_cache) {
#if ZEND_DEBUG
if (!t->cached) {
/* does not use zend_error() *intentionally* */
if (!silent) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_DETECTED, t);
if (last_filename != t->filename || last_lineno!=t->lineno) {
/* flush old leak */
if (leak_count>0) {
if (!silent && leak_count>1) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *) leak_count-1);
}
leak_count=0;
total_bytes=0;
}
last_filename = t->filename;
last_lineno = t->lineno;
if (!silent) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_DETECTED, t);
}
}
leak_count++;
total_bytes += t->size;
}
#endif
p = t->pNext;
@ -362,6 +380,11 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
t = t->pNext;
}
}
#if ZEND_DEBUG
if (!silent && leak_count>1) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *) leak_count-1);
}
#endif
}

View file

@ -35,16 +35,15 @@ static void (*original_sigsegv_handler)(int);
static void zend_handle_sigsegv(int dummy)
{
fflush(stdout);
fflush(stderr);
signal(SIGSEGV, original_sigsegv_handler);
/*
printf("SIGSEGV caught on opcode %d on opline %d of %s() at %s:%d\n\n",
fprintf(stderr, "SIGSEGV caught on opcode %d on opline %d of %s() at %s:%d\n\n",
active_opline->opcode,
active_opline-EG(active_op_array)->opcodes,
get_active_function_name(),
zend_get_executed_filename(),
zend_get_executed_lineno());
original_sigsegv_handler(dummy);
*/
}