mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Give more information and save log lines in memory leak reports
This commit is contained in:
parent
9b4d71205b
commit
080105f79f
3 changed files with 29 additions and 6 deletions
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue