summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-03-03 16:12:41 +0300
committerDmitry Stogov <dmitry@zend.com>2017-03-03 16:12:41 +0300
commit6158b517c437e2b49f50a6807267c200492e6b74 (patch)
treebef19972e37551bca3a4086c02e5f249550bd878
parentf844c0880d99bd623f95afbf832416e26b5e4ce4 (diff)
parent648b756f35fdfc1948126ce954a3f7d6bd479ba5 (diff)
downloadphp-git-6158b517c437e2b49f50a6807267c200492e6b74.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Fixed file-cache (Zend/tests/unused_shared_static_variables.phpt)
-rw-r--r--ext/opcache/zend_file_cache.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index c9ae0dd66e..dea427fcaf 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -359,6 +359,25 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra
zend_file_cache_serialize_hash(ht, script, info, buf, zend_file_cache_serialize_zval);
}
+ if (op_array->scope && !IS_SERIALIZED(op_array->opcodes)) {
+ if (UNEXPECTED(zend_shared_alloc_get_xlat_entry(op_array->opcodes))) {
+ op_array->refcount = (uint32_t*)(intptr_t)-1;
+ SERIALIZE_PTR(op_array->literals);
+ SERIALIZE_PTR(op_array->opcodes);
+ SERIALIZE_PTR(op_array->arg_info);
+ SERIALIZE_PTR(op_array->vars);
+ SERIALIZE_STR(op_array->function_name);
+ SERIALIZE_STR(op_array->filename);
+ SERIALIZE_PTR(op_array->live_range);
+ SERIALIZE_PTR(op_array->scope);
+ SERIALIZE_STR(op_array->doc_comment);
+ SERIALIZE_PTR(op_array->try_catch_array);
+ SERIALIZE_PTR(op_array->prototype);
+ return;
+ }
+ zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array->opcodes);
+ }
+
if (op_array->literals && !IS_SERIALIZED(op_array->literals)) {
zval *p, *end;
@@ -937,6 +956,22 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
script, buf, zend_file_cache_unserialize_zval, ZVAL_PTR_DTOR);
}
+ if (op_array->refcount) {
+ op_array->refcount = NULL;
+ UNSERIALIZE_PTR(op_array->literals);
+ UNSERIALIZE_PTR(op_array->opcodes);
+ UNSERIALIZE_PTR(op_array->arg_info);
+ UNSERIALIZE_PTR(op_array->vars);
+ UNSERIALIZE_STR(op_array->function_name);
+ UNSERIALIZE_STR(op_array->filename);
+ UNSERIALIZE_PTR(op_array->live_range);
+ UNSERIALIZE_PTR(op_array->scope);
+ UNSERIALIZE_STR(op_array->doc_comment);
+ UNSERIALIZE_PTR(op_array->try_catch_array);
+ UNSERIALIZE_PTR(op_array->prototype);
+ return;
+ }
+
if (op_array->literals && !IS_UNSERIALIZED(op_array->literals)) {
zval *p, *end;