From: Dmitry Stogov Date: Fri, 14 Jun 2019 09:47:22 +0000 (+0300) Subject: Attempt to fix edge conditions that may cause bug #78106 X-Git-Tag: php-7.4.0alpha2~100 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91a6cdbff5ebd1ca4db1d6e8c42d3265ce80ace4;p=php Attempt to fix edge conditions that may cause bug #78106 --- diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index b0aace8ff0..995d21d610 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -1880,16 +1880,22 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type) int key_length; int from_shared_memory; /* if the script we've got is stored in SHM */ - if (!file_handle->filename || !ZCG(enabled) || !accel_startup_ok) { + if (!file_handle->filename || !ZCG(accelerator_enabled)) { /* The Accelerator is disabled, act as if without the Accelerator */ + ZCG(cache_opline) = NULL; + ZCG(cache_persistent_script) = NULL; return accelerator_orig_compile_file(file_handle, type); } else if (file_cache_only) { + ZCG(cache_opline) = NULL; + ZCG(cache_persistent_script) = NULL; return file_cache_compile_file(file_handle, type); } else if (!ZCG(accelerator_enabled) || (ZCSG(restart_in_progress) && accel_restart_is_active())) { if (ZCG(accel_directives).file_cache) { return file_cache_compile_file(file_handle, type); } + ZCG(cache_opline) = NULL; + ZCG(cache_persistent_script) = NULL; return accelerator_orig_compile_file(file_handle, type); } @@ -1916,10 +1922,14 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type) /* try to find cached script by key */ key = accel_make_persistent_key(file_handle->filename, strlen(file_handle->filename), &key_length); if (!key) { + ZCG(cache_opline) = NULL; + ZCG(cache_persistent_script) = NULL; return accelerator_orig_compile_file(file_handle, type); } persistent_script = zend_accel_hash_str_find(&ZCSG(hash), key, key_length); } else if (UNEXPECTED(is_stream_path(file_handle->filename) && !is_cacheable_stream_path(file_handle->filename))) { + ZCG(cache_opline) = NULL; + ZCG(cache_persistent_script) = NULL; return accelerator_orig_compile_file(file_handle, type); } @@ -3986,6 +3996,7 @@ static int accel_preload(const char *config) char *orig_open_basedir; ZCG(enabled) = 0; + ZCG(accelerator_enabled) = 0; orig_open_basedir = PG(open_basedir); PG(open_basedir) = NULL; preload_orig_compile_file = accelerator_orig_compile_file;