summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-10-27 01:28:58 +0300
committerDmitry Stogov <dmitry@zend.com>2017-10-27 01:28:58 +0300
commit49ea143bbd8d0bfcd393d0b5308a5d7833fc087c (patch)
tree071b08e8067e5a6a1e9726e3d76dfe81cc42d6b0 /Zend/zend_execute.h
parent1ab0d820dabc612b7d371d6ed524f60f68101d0f (diff)
downloadphp-git-49ea143bbd8d0bfcd393d0b5308a5d7833fc087c.tar.gz
Encapsulate reference-counting primitives.
Prohibit direct update of GC_REFCOUNT(), GC_SET_REFCOUNT(), GC_ADDREF() and GC_DELREF() shoukf be instead. Added mactros to validate reference-counting (disabled for now). These macros are going to be used to eliminate race-condintions during reference-counting on data shared between threads.
Diffstat (limited to 'Zend/zend_execute.h')
-rw-r--r--Zend/zend_execute.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index 39fce43ccc..44524beded 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -85,19 +85,19 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval
if (ZEND_CONST_COND(value_type & (IS_VAR|IS_CV), 1) && variable_ptr == value) {
if (value_type == IS_VAR && ref) {
ZEND_ASSERT(GC_REFCOUNT(ref) > 1);
- --GC_REFCOUNT(ref);
+ GC_DELREF(ref);
}
return variable_ptr;
}
garbage = Z_COUNTED_P(variable_ptr);
- if (--GC_REFCOUNT(garbage) == 0) {
+ if (GC_DELREF(garbage) == 0) {
ZVAL_COPY_VALUE(variable_ptr, value);
if (value_type & (IS_CONST|IS_CV)) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(variable_ptr))) {
Z_ADDREF_P(variable_ptr);
}
} else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) {
- if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
efree_size(ref, sizeof(zend_reference));
} else if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
Z_ADDREF_P(variable_ptr);
@@ -120,7 +120,7 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval
Z_ADDREF_P(variable_ptr);
}
} else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) {
- if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
efree_size(ref, sizeof(zend_reference));
} else if (Z_OPT_REFCOUNTED_P(variable_ptr)) {
Z_ADDREF_P(variable_ptr);
@@ -223,7 +223,7 @@ static zend_always_inline void zend_vm_stack_free_extra_args_ex(uint32_t call_in
p--;
if (Z_REFCOUNTED_P(p)) {
zend_refcounted *r = Z_COUNTED_P(p);
- if (!--GC_REFCOUNT(r)) {
+ if (!GC_DELREF(r)) {
ZVAL_NULL(p);
zval_dtor_func(r);
} else {