diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-11-03 21:02:55 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-11-03 21:02:55 +0300 |
commit | d3fa900780994ae812b5314900556a7f1bfb916e (patch) | |
tree | 3643d8d47dc9d0106b52816b4fbc969340cb5098 | |
parent | 7fba7209e1d8409aaea236527125999b8f480785 (diff) | |
download | php-git-d3fa900780994ae812b5314900556a7f1bfb916e.tar.gz |
Removed workaraouns for inconsistent zvals (REFCOUNTED+INTERNED). They should be fixed now.
-rw-r--r-- | Zend/zend_ast.c | 13 | ||||
-rw-r--r-- | Zend/zend_variables.c | 4 |
2 files changed, 1 insertions, 16 deletions
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: { |