svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/Zend/zend_API.c trunk/Zend/zend_API.c
| From: | Antony Dovgal | Date: | Thu, 31 Mar 2011 11:59:34 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/Zend/zend_API.c trunk/Zend/zend_API.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-64781@lists.php.net to get a copy of this message | ||
tony2001 Thu, 31 Mar 2011 11:59:34 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=309853
Log:
fix bug #54423 (classes from dl()'ed extensions are not destroyed)
Bug: http://bugs.php.net/54423 (Closed) classes from
dl()'ed extensions are not destroyed
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/Zend/zend_API.c
U php/php-src/trunk/Zend/zend_API.c
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2011-03-31 09:00:14 UTC (rev 309852)
+++ php/php-src/branches/PHP_5_3/NEWS 2011-03-31 11:59:34 UTC (rev 309853)
@@ -2,6 +2,8 @@
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2011, PHP 5.3.7
- Zend Engine:
+ . Fixed bug #54423 (classes from dl()'ed extensions are not destroyed).
+ (Tony, Dmitry)
. Fixed bug #54262 (Crash when assigning value to a dimension in a non-array).
(Dmitry)
Modified: php/php-src/branches/PHP_5_3/Zend/zend_API.c
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/zend_API.c 2011-03-31 09:00:14 UTC (rev 309852)
+++ php/php-src/branches/PHP_5_3/Zend/zend_API.c 2011-03-31 11:59:34 UTC (rev 309853)
@@ -2082,6 +2082,22 @@
}
/* }}} */
+static int clean_module_class(const zend_class_entry **ce, int *module_number TSRMLS_DC) /* {{{ */
+{
+ if ((*ce)->type == ZEND_INTERNAL_CLASS && (*ce)->module->module_number ==
*module_number) {
+ return ZEND_HASH_APPLY_REMOVE;
+ } else {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+}
+/* }}} */
+
+static void clean_module_classes(int module_number TSRMLS_DC) /* {{{ */
+{
+ zend_hash_apply_with_argument(EG(class_table), (apply_func_arg_t) clean_module_class, (void *)
&module_number TSRMLS_CC);
+}
+/* }}} */
+
void module_destructor(zend_module_entry *module) /* {{{ */
{
TSRMLS_FETCH();
@@ -2089,6 +2105,7 @@
if (module->type == MODULE_TEMPORARY) {
zend_clean_module_rsrc_dtors(module->module_number TSRMLS_CC);
clean_module_constants(module->module_number TSRMLS_CC);
+ clean_module_classes(module->module_number TSRMLS_CC);
}
if (module->module_started && module->module_shutdown_func) {
Modified: php/php-src/trunk/Zend/zend_API.c
===================================================================
--- php/php-src/trunk/Zend/zend_API.c 2011-03-31 09:00:14 UTC (rev 309852)
+++ php/php-src/trunk/Zend/zend_API.c 2011-03-31 11:59:34 UTC (rev 309853)
@@ -2208,6 +2208,22 @@
}
/* }}} */
+static int clean_module_class(const zend_class_entry **ce, int *module_number TSRMLS_DC) /* {{{ */
+{
+ if ((*ce)->type == ZEND_INTERNAL_CLASS && (*ce)->module->module_number ==
*module_number) {
+ return ZEND_HASH_APPLY_REMOVE;
+ } else {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+}
+/* }}} */
+
+static void clean_module_classes(int module_number TSRMLS_DC) /* {{{ */
+{
+ zend_hash_apply_with_argument(EG(class_table), (apply_func_arg_t) clean_module_class, (void *)
&module_number TSRMLS_CC);
+}
+/* }}} */
+
void module_destructor(zend_module_entry *module) /* {{{ */
{
TSRMLS_FETCH();
@@ -2215,6 +2231,7 @@
if (module->type == MODULE_TEMPORARY) {
zend_clean_module_rsrc_dtors(module->module_number TSRMLS_CC);
clean_module_constants(module->module_number TSRMLS_CC);
+ clean_module_classes(module->module_number TSRMLS_CC);
}
if (module->module_started && module->module_shutdown_func) {