Bug #13437 Updated: PHP cores on exit; memory deallocation problem?
| From: | dshadow at zort dot net | Date: | Tue, 11 Dec 2001 14:51:45 +0000 |
| Subject: | Bug #13437 Updated: PHP cores on exit; memory deallocation problem? | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-73078@lists.php.net to get a copy of this message | ||
ID: 13437
User updated by: dshadow@zort.net
Reported By: dshadow@zort.net
Old Status: Feedback
Status: Open
Bug Type: Reproducible crash
Operating System: Linux & Solaris
PHP Version: 4.1RC5
New Comment:
I tried using apache_child_terminate() as suggested, however, this doesn't help any. (It might
be beneficial if this function and its required configuration option were documented somewhere.)
Previous Comments:
------------------------------------------------------------------------
[2001-12-10 22:32:39] zak@php.net
Could you try calling apache_child_terminate() at the end
of your script?
------------------------------------------------------------------------
[2001-12-04 10:54:55] dshadow@zort.net
This helps with my problem of apache children being left in unusable states with large memory
allocations. However, it is still entirely unreasonable that memory that takes only a few seconds to
allocate should need several minutes to be disposed of. I just watched PHP take *six* minutes to
dispose of 70 megs of memory it allocated, and on prior occasions when no one was watching,
I've found it to have be running for *hours* cleaning up after itself.
------------------------------------------------------------------------
[2001-12-03 17:46:34] venaas@php.net
I've seen this as well. The time limit you set is removed
when the script finishes but before the memory is cleaned
up. What I did to avoid the problem was to change the code
in php_request_shutdown() main/main.c. The end of the function looks like:
zend_try {
shutdown_memory_manager(CG(unclean_shutdown), 0);
} zend_end_try();
zend_try {
zend_unset_timeout(TSRMLS_C);
} zend_end_try();
I switched the timeout and the shutdown, and then it worked
for me. It still takes a long time, but you don't get a
timeout. Not sure if this is the correct fix, but maybe
you want to test and confirm that it helps?
------------------------------------------------------------------------
[2001-12-03 15:58:46] dshadow@zort.net
This problem is still happening on 4.1RC5, though it seems to be doing a little better than before.
However it's also ignoring the time value I'm passing in to set_time_limit(), but only
when it runs out of time during clean-up.
#0 0x8107f05 in _efree (ptr=0xa62065c) at zend_alloc.c:240
240 REMOVE_POINTER_FROM_LIST(p);
(gdb) bt
#0 0x8107f05 in _efree (ptr=0xa62065c) at zend_alloc.c:240
#1 0x810829b in shutdown_memory_manager (silent=1, clean_cache=1) at zend_alloc.c:469
#2 0x807169e in php_module_shutdown () at main.c:1007
#3 0x8070239 in main (argc=3, argv=0xbffffc44) at cgi_main.c:788
------------------------------------------------------------------------
[2001-10-10 22:17:21] elixer@php.net
Confirmed on Redhat 7.2
No crash, but print_r($us) at the end of this script displays no output.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/?id=13437
Edit this bug report at http://bugs.php.net/?id=13437&edit=1