diff options
Diffstat (limited to 'Zend/zend_vm_def.h')
| -rw-r--r-- | Zend/zend_vm_def.h | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index ad6dc58ec9..1fc343b5cb 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5513,8 +5513,14 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED|CONST|VAR)  				ZVAL_UNDEF(var);  				zval_dtor_func_for_ptr(garbage);  			} else { -				GC_ZVAL_CHECK_POSSIBLE_ROOT(var); -				ZVAL_UNDEF(var); +				zval *z = var; +				ZVAL_DEREF(z); +				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) { +					ZVAL_UNDEF(var); +					gc_possible_root(Z_COUNTED_P(z)); +				} else { +					ZVAL_UNDEF(var); +				}  			}  		} else {  			ZVAL_UNDEF(var); | 
