From 2e0db496fa597d0ecc0aa968e32e6461b8e51129 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 10 Oct 2017 19:37:46 +0300 Subject: [PATCH] Fixed file_cache broken by recent AST related changes. --- ext/opcache/zend_file_cache.c | 50 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 0b95212693..2e5f3afdd2 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -266,36 +266,37 @@ static void zend_file_cache_serialize_hash(HashTable *ht, } } -static zend_ast *zend_file_cache_serialize_ast(zend_ast *ast, - zend_persistent_script *script, - zend_file_cache_metainfo *info, - void *buf) +static void zend_file_cache_serialize_ast(zend_ast *ast, + zend_persistent_script *script, + zend_file_cache_metainfo *info, + void *buf) { uint32_t i; - zend_ast *ret; - - SERIALIZE_PTR(ast); - ret = ast; - UNSERIALIZE_PTR(ast); + zend_ast *tmp; if (ast->kind == ZEND_AST_ZVAL || ast->kind == ZEND_AST_CONSTANT) { zend_file_cache_serialize_zval(&((zend_ast_zval*)ast)->val, script, info, buf); } else if (zend_ast_is_list(ast)) { zend_ast_list *list = zend_ast_get_list(ast); for (i = 0; i < list->children; i++) { - if (list->child[i]) { - list->child[i] = zend_file_cache_serialize_ast(list->child[i], script, info, buf); + if (list->child[i] && !IS_SERIALIZED(list->child[i])) { + SERIALIZE_PTR(list->child[i]); + tmp = list->child[i]; + UNSERIALIZE_PTR(tmp); + zend_file_cache_serialize_ast(tmp, script, info, buf); } } } else { uint32_t children = zend_ast_get_num_children(ast); for (i = 0; i < children; i++) { - if (ast->child[i]) { - ast->child[i] = zend_file_cache_serialize_ast(ast->child[i], script, info, buf); + if (ast->child[i] && !IS_SERIALIZED(ast->child[i])) { + SERIALIZE_PTR(ast->child[i]); + tmp = ast->child[i]; + UNSERIALIZE_PTR(tmp); + zend_file_cache_serialize_ast(tmp, script, info, buf); } } } - return ret; } static void zend_file_cache_serialize_zval(zval *zv, @@ -336,7 +337,7 @@ static void zend_file_cache_serialize_zval(zval *zv, SERIALIZE_PTR(Z_AST_P(zv)); ast = Z_AST_P(zv); UNSERIALIZE_PTR(ast); - zend_file_cache_serialize_ast(Z_ASTVAL_P(zv), script, info, buf); + zend_file_cache_serialize_ast(GC_AST(ast), script, info, buf); } break; } @@ -884,32 +885,31 @@ static void zend_file_cache_unserialize_hash(HashTable *ht, } } -static zend_ast *zend_file_cache_unserialize_ast(zend_ast *ast, - zend_persistent_script *script, - void *buf) +static void zend_file_cache_unserialize_ast(zend_ast *ast, + zend_persistent_script *script, + void *buf) { uint32_t i; - UNSERIALIZE_PTR(ast); - if (ast->kind == ZEND_AST_ZVAL || ast->kind == ZEND_AST_CONSTANT) { zend_file_cache_unserialize_zval(&((zend_ast_zval*)ast)->val, script, buf); } else if (zend_ast_is_list(ast)) { zend_ast_list *list = zend_ast_get_list(ast); for (i = 0; i < list->children; i++) { - if (list->child[i]) { - list->child[i] = zend_file_cache_unserialize_ast(list->child[i], script, buf); + if (list->child[i] && !IS_UNSERIALIZED(list->child[i])) { + UNSERIALIZE_PTR(list->child[i]); + zend_file_cache_unserialize_ast(list->child[i], script, buf); } } } else { uint32_t children = zend_ast_get_num_children(ast); for (i = 0; i < children; i++) { - if (ast->child[i]) { - ast->child[i] = zend_file_cache_unserialize_ast(ast->child[i], script, buf); + if (ast->child[i] && !IS_UNSERIALIZED(ast->child[i])) { + UNSERIALIZE_PTR(ast->child[i]); + zend_file_cache_unserialize_ast(ast->child[i], script, buf); } } } - return ast; } static void zend_file_cache_unserialize_zval(zval *zv, -- 2.50.1