diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-04-11 14:47:38 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-04-11 14:47:38 +0400 |
commit | f1f3e3c371635f54cb5a43839be6dee320dbe7c9 (patch) | |
tree | e87ab2c248b73c23e6fd2b281d017aae4bc0c6fa /Zend/zend_list.c | |
parent | aa2ed70d43d28f008c7cdd0a9128183b725eb51f (diff) | |
download | php-git-f1f3e3c371635f54cb5a43839be6dee320dbe7c9.tar.gz |
fixed persistent reaource destruction
Diffstat (limited to 'Zend/zend_list.c')
-rw-r--r-- | Zend/zend_list.c | 24 |
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); } |