From: Zeev Suraski Date: Sun, 15 Feb 2004 12:58:19 +0000 (+0000) Subject: Use zval_ptr_dtor() to free variables as soon as they hit refcount of 0. X-Git-Tag: RELEASE_0_2_0~331 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c710a9f9bb65f90d35bdb88d2bc70df1f03b81c;p=php Use zval_ptr_dtor() to free variables as soon as they hit refcount of 0. Note: You should not be using ZVAL_DELREF() in day to day usage. Instead, you should use zval_ptr_dtor(). Use ZVAL_DELREF() only if you're messing with the refcount directly and know what you're doing. Note #2: For clarity, if you want to initialize a new zval with a refcount of 0, it's best to do that directly, instead of using ZVAL_DELREF after allocating the zval... --- diff --git a/ext/com_dotnet/com_saproxy.c b/ext/com_dotnet/com_saproxy.c index 2dbde1415d..78e9f622ed 100644 --- a/ext/com_dotnet/com_saproxy.c +++ b/ext/com_dotnet/com_saproxy.c @@ -265,7 +265,7 @@ static void saproxy_free_storage(void *object TSRMLS_DC) { php_com_saproxy *proxy = (php_com_saproxy *)object; - ZVAL_DELREF(proxy->zobj); + zval_ptr_dtor(&proxy->zobj); efree(proxy->indices); efree(proxy); } @@ -325,7 +325,7 @@ static void saproxy_iter_dtor(zend_object_iterator *iter TSRMLS_DC) { php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - ZVAL_DELREF(I->proxy_obj); + zval_ptr_dtor(&I->proxy_obj); efree(I->indices); efree(I); diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 7545b69f3f..148337ea4b 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -466,7 +466,7 @@ PHP_FUNCTION(libxml_set_streams_context) return; } if (LIBXML(stream_context)) { - ZVAL_DELREF(LIBXML(stream_context)); + zval_ptr_dtor(&LIBXML(stream_context)); LIBXML(stream_context) = NULL; } ZVAL_ADDREF(arg); diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 9bf75d9bbb..4befc71e64 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -70,7 +70,7 @@ void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type) } } if (bbuf.vars[i]) { - ZVAL_DELREF(bbuf.vars[i]); + zval_ptr_dtor(&bbuf.vars[i]); } } diff --git a/ext/session/session.c b/ext/session/session.c index dcb45d0e81..27874f72ee 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -281,7 +281,7 @@ void php_add_session_var(char *name, size_t namelen TSRMLS_DC) zval *empty_var; ALLOC_INIT_ZVAL(empty_var); /* this sets refcount to 1 */ - ZVAL_DELREF(empty_var); /* our module does not maintain a ref */ + empty_var->refcount = 0; /* our module does not maintain a ref */ /* The next call will increase refcount by NR_OF_SYM_TABLES==2 */ zend_set_hash_symbol(empty_var, name, namelen, 1, 2, Z_ARRVAL_P(PS(http_session_vars)), &EG(symbol_table)); } else if (sym_global == NULL) {