mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fix uses of zval_add_ref and add comment on usage
zval_add_ref should be used as a copy ctor, after the value was already copied. In particular when used with hash insertions, it should be applied to the return value of the insert function.
This commit is contained in:
parent
411980a8bc
commit
1266515e19
6 changed files with 45 additions and 46 deletions
|
@ -201,13 +201,15 @@ ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC)
|
|||
}
|
||||
}
|
||||
|
||||
/* This function should only be used as a copy constructor, i.e. it
|
||||
* should only be called AFTER a zval has been copied to another
|
||||
* location using ZVAL_COPY_VALUE. Do not call it before copying,
|
||||
* otherwise a reference may be leaked. */
|
||||
ZEND_API void zval_add_ref(zval *p)
|
||||
{
|
||||
if (Z_REFCOUNTED_P(p)) {
|
||||
if (Z_ISREF_P(p) && Z_REFCOUNT_P(p) == 1) {
|
||||
zend_reference *ref = Z_REF_P(p);
|
||||
ZVAL_COPY(p, Z_REFVAL_P(p));
|
||||
efree_size(ref, sizeof(zend_reference));
|
||||
} else {
|
||||
Z_ADDREF_P(p);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue