Edit report at https://bugs.php.net/bug.php?id=51760&edit=1
ID: 51760 Updated by: php-bugs@lists.php.net Reported by: russell dot tempero at rightnow dot com Summary: Memory Leak: zend hash not properly destroyed in CGI main -Status: Feedback +Status: No Feedback Type: Bug Package: Performance problem Operating System: Linux PHP Version: 5.3.2 New Comment: No feedback was provided. The bug is being suspended because we assume that you are no longer experiencing the problem. If this is not the case and you are able to provide the information that was requested earlier, please do so and change the status of the bug back to "Open". Thank you. Previous Comments: ------------------------------------------------------------------------ [2010-06-08 15:49:05] tony2...@php.net See also bug #47412. ------------------------------------------------------------------------ [2010-06-08 14:04:57] tony2...@php.net This hash is destroyed on shutdown by this function: static PHP_MSHUTDOWN_FUNCTION(cgi) { zend_hash_destroy(&CGIG(user_config_cache)); UNREGISTER_INI_ENTRIES(); return SUCCESS; } ------------------------------------------------------------------------ [2010-05-14 20:32:47] russell dot tempero at rightnow dot com In my patch I forgot to set ht->pListHead to NULL. The following line should be added toward the end of the zend_hash_destroy() function: ht->pListHead = NULL; ------------------------------------------------------------------------ [2010-05-06 23:57:27] russell dot tempero at rightnow dot com Description: ------------ After upgrading to PHP 5.3.2, we ran it through Purify and noticed the following memory leak: MLK: 32 bytes leaked at 0x9b70ca8 * This memory was allocated from: calloc [rtlib.o] _zend_hash_init [zend_hash.c:168] php_cgi_globals_ctor [cgi_main.c:1429] allocate_new_resource [TSRM.c:303] ts_resource_ex [TSRM.c:370] . . . The problem is that php_cgi_globals_ctor() (the constructor) is calling zend_hash_init() but there is no corresponding destructor to call zend_hash_destroy(). I have attached a patch that will fix this. You will notice in the patch that I had to make changes to zend_hash_destroy() to prevent a double free. Apparently there are places that are already calling zend_hash_destroy() for the hash that is initialized in php_cgi_globals_ctor(), but it is not currently getting called all of the time. Perhaps a more correct fix would be to find where these other calls to zend_hash_destroy() are being made and either eliminate them altogether or make sure they are called all of the time and not have the destructor function. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=51760&edit=1