summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2000-01-26 05:03:22 +0000
committerAndi Gutmans <andi@php.net>2000-01-26 05:03:22 +0000
commit4585f7bf1f8e5fb52aebd0990d67fa017ea8a918 (patch)
tree6f54962014d4695fdd5910019ac7ec4dd0a8adb2
parent5c3917478a0cbdd4fd7468780e3c8175fd397707 (diff)
downloadphp-git-4585f7bf1f8e5fb52aebd0990d67fa017ea8a918.tar.gz
- Allow is_ref to become 0 in case the refcount is back to 1.
-rw-r--r--Zend/zend_execute_API.c4
-rw-r--r--Zend/zend_opcode.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 912310a555..11a24eec01 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -217,9 +217,11 @@ ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
if ((*zval_ptr)->refcount==0) {
zval_dtor(*zval_ptr);
safe_free_zval_ptr(*zval_ptr);
+ } else if ((*zval_ptr)->refcount == 1) {
+ (*zval_ptr)->is_ref = 0;
}
}
-
+
ZEND_API inline int i_zend_is_true(zval *op)
{
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index 4ca0b43eed..a80aa26bc7 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -313,9 +313,11 @@ void pass_include_eval(zend_op_array *op_array)
while (opline<end) {
if (opline->op1.op_type==IS_CONST) {
opline->op1.u.constant.is_ref = 1;
+ opline->op1.u.constant.refcount = 2; /* Make sure is_ref won't be reset */
}
if (opline->op2.op_type==IS_CONST) {
opline->op2.u.constant.is_ref = 1;
+ opline->op2.u.constant.refcount = 2;
}
opline++;
}