summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_list.c10
-rw-r--r--Zend/zend_list.h2
-rw-r--r--Zend/zend_variables.c4
3 files changed, 13 insertions, 3 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 7892b7057c..7ebe9c13a7 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -46,13 +46,21 @@ ZEND_API zval *zend_list_insert(void *ptr, int type TSRMLS_DC)
ZEND_API int _zend_list_delete(zend_resource *res TSRMLS_DC)
{
- if (GC_REFCOUNT(res) <= 0) {
+ if (--GC_REFCOUNT(res) <= 0) {
return zend_hash_index_del(&EG(regular_list), res->handle);
} else {
return SUCCESS;
}
}
+ZEND_API int _zend_list_free(zend_resource *res TSRMLS_DC)
+{
+ if (GC_REFCOUNT(res) <= 0) {
+ return zend_hash_index_del(&EG(regular_list), res->handle);
+ } else {
+ return SUCCESS;
+ }
+}
static void zend_resource_dtor(zend_resource *res TSRMLS_DC)
{
diff --git a/Zend/zend_list.h b/Zend/zend_list.h
index a9f96addb6..c243b0d9ef 100644
--- a/Zend/zend_list.h
+++ b/Zend/zend_list.h
@@ -66,9 +66,11 @@ int zend_init_rsrc_list_dtors(void);
void zend_destroy_rsrc_list_dtors(void);
ZEND_API zval *zend_list_insert(void *ptr, int type TSRMLS_DC);
+ZEND_API int _zend_list_free(zend_resource *res TSRMLS_DC);
ZEND_API int _zend_list_delete(zend_resource *res TSRMLS_DC);
ZEND_API int _zend_list_close(zend_resource *res TSRMLS_DC);
+#define zend_list_free(res) _zend_list_free(res TSRMLS_CC)
#define zend_list_delete(res) _zend_list_delete(res TSRMLS_CC)
#define zend_list_close(res) _zend_list_close(res TSRMLS_CC)
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index fcb0dd1b3e..ccdef2246c 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -70,7 +70,7 @@ ZEND_API void _zval_dtor_func(zend_refcounted *p ZEND_FILE_LINE_DC)
if (--GC_REFCOUNT(res) == 0) {
/* destroy resource */
- zend_list_delete(res);
+ zend_list_free(res);
}
break;
}
@@ -129,7 +129,7 @@ ZEND_API void _zval_dtor_func_for_ptr(zend_refcounted *p ZEND_FILE_LINE_DC)
TSRMLS_FETCH();
/* destroy resource */
- zend_list_delete(res);
+ zend_list_free(res);
break;
}
case IS_REFERENCE: {