From: Dmitry Stogov Date: Fri, 3 Nov 2017 18:02:55 +0000 (+0300) Subject: Removed workaraouns for inconsistent zvals (REFCOUNTED+INTERNED). They should be... X-Git-Tag: php-7.3.0alpha1~1087 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d3fa900780994ae812b5314900556a7f1bfb916e;p=php Removed workaraouns for inconsistent zvals (REFCOUNTED+INTERNED). They should be fixed now. --- diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index f4e7c09a83..68db0e023f 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -557,24 +557,13 @@ ZEND_API zend_ast_ref *zend_ast_copy(zend_ast *ast) } ZEND_API void zend_ast_destroy(zend_ast *ast) { - zval *zv; - if (!ast) { return; } switch (ast->kind) { case ZEND_AST_ZVAL: - /* Destroy value without using GC: When opcache moves arrays into SHM it will - * free the zend_array structure, so references to it from outside the op array - * become invalid. GC would cause such a reference in the root buffer. */ - zv = zend_ast_get_zval(ast); - if (Z_TYPE_P(zv) == IS_STRING) { - /* Compiler may keep REFCOUNTED zvals with INTERNED strings */ - zend_string_release(Z_STR_P(zv)); - } else { - zval_ptr_dtor_nogc(zv); - } + zval_ptr_dtor_nogc(zend_ast_get_zval(ast)); break; case ZEND_AST_CONSTANT: zend_string_release(zend_ast_get_constant_name(ast)); diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 7ff0916e7c..1d3d2a66a7 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -34,13 +34,9 @@ ZEND_API void ZEND_FASTCALL _zval_dtor_func(zend_refcounted *p ZEND_FILE_LINE_DC case IS_STRING: { zend_string *str = (zend_string*)p; CHECK_ZVAL_STRING_REL(str); -#if ZEND_RC_DEBUG ZEND_ASSERT(!ZSTR_IS_INTERNED(str)); ZEND_ASSERT(GC_REFCOUNT(str) == 0); pefree(str, GC_FLAGS(str) & IS_STR_PERSISTENT); -#else - zend_string_free(str); -#endif break; } case IS_ARRAY: {