ID: 16888 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Analyzed Bug Type: DOM XML related Operating System: Windows XP PHP Version: 4.2.0 New Comment:
My patch is available at http://trash.chregu.tv/domxml-memleak.diff (for CVS-HEAD, but should be applyable to PHP_4_2_0 branch as well) The big memory hole is certainly fixed with that, don't know about windows and the little memleaks... Would be great, if someone could test it. Previous Comments: ------------------------------------------------------------------------ [2002-05-17 11:44:09] [EMAIL PROTECTED] Other people sit at the lake and enjoy the stupid hot weather here, i hunt memory leaks... what a pleasure... But i found it. Nodes which had no parents were not freed. i have a fix, but it's not perfect yet. expect a patch soon. ------------------------------------------------------------------------ [2002-05-17 07:44:01] [EMAIL PROTECTED] Ok, i did some tests on linux and indeed There is a big f**king memory hole in domxml with append_child/append_sibling :( even with Josephs patch. I will investigate further today... ------------------------------------------------------------------------ [2002-05-16 19:17:32] [EMAIL PROTECTED] Oh, and I've tested it to work with 70,000 elements... ------------------------------------------------------------------------ [2002-05-16 19:04:25] [EMAIL PROTECTED] I seem to have found the problem. Nodes are being freed twice: once in a call to php_free_xml_node, and once in a call to node_wrapper_dtor. I've made two changes, one i've replaced the "free" code in php_free_xml_node with a call to the static inline function node_wrapper_dtor, and then call dom_object_set_data to clear the data (a check should be put here to make sure that the refcount is 0 before doing this, but I don't have time right now). I'll post the patch to the php-dev list so that people can look it over, and make sure that it doesn't introduce any memory leaks. I'll mark the bug fixed when I commit my change. ------------------------------------------------------------------------ [2002-05-16 15:59:08] [EMAIL PROTECTED] Ahh, Now I'm understanding the original poster. I never got the 404 page. Must have been a browser specific issue. The error occurs in the cleanup routines on both iis and apache. The stack trace is as follows: _zval_ptr_dtor(_zval_struct * * 0x00e2f568, char * 0x10023020 `string', unsigned int 0x000001f8) line 272 + 5 bytes node_wrapper_dtor(_xmlNode * 0x005cb9c8) line 504 + 26 bytes node_list_wrapper_dtor(_xmlNode * 0x005cb9c8) line 531 + 9 bytes node_list_wrapper_dtor(_xmlNode * 0x005c3c18) line 521 + 12 bytes php_free_xml_doc(_zend_rsrc_list_entry * 0x00e38e18, void * * * 0x00afe7a8) line 563 + 12 bytes list_entry_destructor(void * 0x00e38e18) line 177 + 16 bytes zend_hash_apply_deleter(_hashtable * 0x00b2cac4, bucket * 0x00e38db8) line 596 + 15 bytes zend_hash_graceful_reverse_destroy(_hashtable * 0x00b2cac4) line 662 + 13 bytes zend_destroy_rsrc_list(_hashtable * 0x00b2cac4, void * * * 0x00afe7a8) line 233 + 9 bytes shutdown_executor(void * * * 0x00afe7a8) line 196 + 30 bytes zend_deactivate(void * * * 0x00afe7a8) line 596 + 9 bytes php_request_shutdown(void * 0x00000000) line 787 + 9 bytes apache_php_module_main(request_rec * 0x00afc798, int 0x00000000, void * * * 0x00afe7a8) line 96 + 8 bytes send_php(request_rec * 0x00afc798, int 0x00000000, char * 0x00afd248) line 575 + 17 bytes send_parsed_php(request_rec * 0x00afc798) line 590 + 13 bytes ap_invoke_handler(request_rec * 0x00afc798) line 517 + 10 bytes process_request_internal(request_rec * 0x00afc798) line 1308 + 9 bytes ap_process_request(request_rec * 0x00afc798) line 1324 + 9 bytes child_sub_main(int 0x00000000) line 5881 ------------------------------------------------------------------------ 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/16888 -- Edit this bug report at http://bugs.php.net/?id=16888&edit=1