summaryrefslogtreecommitdiff
path: root/Zend/zend_list.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-11 14:47:38 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-11 14:47:38 +0400
commitf1f3e3c371635f54cb5a43839be6dee320dbe7c9 (patch)
treee87ab2c248b73c23e6fd2b281d017aae4bc0c6fa /Zend/zend_list.c
parentaa2ed70d43d28f008c7cdd0a9128183b725eb51f (diff)
downloadphp-git-f1f3e3c371635f54cb5a43839be6dee320dbe7c9.tar.gz
fixed persistent reaource destruction
Diffstat (limited to 'Zend/zend_list.c')
-rw-r--r--Zend/zend_list.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 30d07aed37..5521964588 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -174,11 +174,29 @@ void list_entry_destructor(zval *zv)
void plist_entry_destructor(zval *zv)
{
zend_resource *res = Z_RES_P(zv);
- zend_rsrc_list_dtors_entry *ld;
- TSRMLS_FETCH();
if (res->type >= 0) {
- zend_resource_dtor(res TSRMLS_CC);
+ zend_rsrc_list_dtors_entry *ld;
+ TSRMLS_FETCH();
+
+ ld = zend_hash_index_find_ptr(&list_destructors, res->type);
+ if (ld) {
+ switch (ld->type) {
+ case ZEND_RESOURCE_LIST_TYPE_STD:
+ if (ld->plist_dtor) {
+ (ld->plist_dtor)(res->ptr);
+ }
+ break;
+ case ZEND_RESOURCE_LIST_TYPE_EX:
+ if (ld->plist_dtor_ex) {
+ ld->plist_dtor_ex(res TSRMLS_CC);
+ }
+ break;
+ EMPTY_SWITCH_DEFAULT_CASE()
+ }
+ } else {
+ zend_error(E_WARNING,"Unknown list entry type (%d)", res->type);
+ }
}
free(res);
}