if (call->object) {
Z_ADDREF_P(call->object);
}
- if (OP2_TYPE == IS_VAR && OP2_FREE &&
+ if (OP2_TYPE == IS_VAR && OP2_FREE && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
call->fbc->common.prototype = (zend_function*)function_name;
if (call->object) {
Z_ADDREF_P(call->object);
}
- if (IS_CONST == IS_VAR && 0 &&
+ if (IS_CONST == IS_VAR && 0 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
call->fbc->common.prototype = (zend_function*)function_name;
if (call->object) {
Z_ADDREF_P(call->object);
}
- if (IS_TMP_VAR == IS_VAR && 1 &&
+ if (IS_TMP_VAR == IS_VAR && 1 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
call->fbc->common.prototype = (zend_function*)function_name;
if (call->object) {
Z_ADDREF_P(call->object);
}
- if (IS_VAR == IS_VAR && (free_op2.var != NULL) &&
+ if (IS_VAR == IS_VAR && (free_op2.var != NULL) && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
call->fbc->common.prototype = (zend_function*)function_name;
if (call->object) {
Z_ADDREF_P(call->object);
}
- if (IS_CV == IS_VAR && 0 &&
+ if (IS_CV == IS_VAR && 0 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
call->fbc->common.prototype = (zend_function*)function_name;