diff options
Diffstat (limited to 'ext/opcache/ZendAccelerator.c')
| -rw-r--r-- | ext/opcache/ZendAccelerator.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 601e3af0cf..34e4ef0071 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -412,7 +412,7 @@ static zend_string *accel_find_interned_string(zend_string *str) } if (!ZCG(counted)) { - if (accel_activate_add() == FAILURE) { + if (!ZCG(accelerator_enabled) || accel_activate_add() == FAILURE) { return str; } ZCG(counted) = 1; @@ -1070,7 +1070,7 @@ char *accel_make_persistent_key(const char *path, int path_length, int *key_len) cwd_len = ZSTR_LEN(cwd_str); if (ZCG(cwd_check)) { ZCG(cwd_check) = 0; - if ((ZCG(counted) || ZCSG(accelerator_enabled))) { + if (ZCG(accelerator_enabled)) { zend_string *str = accel_find_interned_string(cwd_str); if (!str) { @@ -1110,7 +1110,7 @@ char *accel_make_persistent_key(const char *path, int path_length, int *key_len) if (ZCG(include_path_check)) { ZCG(include_path_check) = 0; - if ((ZCG(counted) || ZCSG(accelerator_enabled))) { + if (ZCG(accelerator_enabled)) { zend_string *str = accel_find_interned_string(ZCG(include_path)); if (!str) { @@ -1193,7 +1193,7 @@ int zend_accel_invalidate(const char *filename, int filename_len, zend_bool forc zend_string *realpath; zend_persistent_script *persistent_script; - if (!ZCG(enabled) || !accel_startup_ok || !ZCSG(accelerator_enabled) || accelerator_shm_read_lock() != SUCCESS) { + if (!ZCG(accelerator_enabled) || accelerator_shm_read_lock() != SUCCESS) { return FAILURE; } @@ -1764,7 +1764,7 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type) } else if (file_cache_only) { return file_cache_compile_file(file_handle, type); #endif - } else if ((!ZCG(counted) && !ZCSG(accelerator_enabled)) || + } else if (!ZCG(accelerator_enabled) || (ZCSG(restart_in_progress) && accel_restart_is_active())) { #ifdef HAVE_OPCACHE_FILE_CACHE if (ZCG(accel_directives).file_cache) { @@ -2059,12 +2059,11 @@ static int persistent_stream_open_function(const char *filename, zend_file_handl /* zend_resolve_path() replacement for PHP 5.3 and above */ static zend_string* persistent_zend_resolve_path(const char *filename, int filename_len) { - if (ZCG(enabled) && accel_startup_ok && + if ( #ifdef HAVE_OPCACHE_FILE_CACHE !file_cache_only && #endif - (ZCG(counted) || ZCSG(accelerator_enabled)) && - !ZCSG(restart_in_progress)) { + ZCG(accelerator_enabled)) { /* check if callback is called from include_once or it's a main request */ if ((!EG(current_execute_data) && @@ -2213,6 +2212,7 @@ static void accel_activate(void) zend_alter_ini_entry_chars(key, "0", 1, ZEND_INI_SYSTEM, ZEND_INI_STAGE_RUNTIME); zend_string_release(key); zend_accel_error(ACCEL_LOG_WARNING, "Can't cache files in chroot() directory with too big inode"); + ZCG(accelerator_enabled) = 0; return; } } @@ -2270,12 +2270,15 @@ static void accel_activate(void) } accel_restart_leave(); } - } else { + } + if (!ZCG(pcre_reseted)) { reset_pcre = 1; } zend_shared_alloc_unlock(); } + ZCG(accelerator_enabled) = ZCSG(accelerator_enabled); + SHM_PROTECT(); HANDLE_UNBLOCK_INTERRUPTIONS(); @@ -2287,8 +2290,10 @@ static void accel_activate(void) realpath_cache_clean(); accel_reset_pcre_cache(); + ZCG(pcre_reseted) = 0; } else if (reset_pcre) { accel_reset_pcre_cache(); + ZCG(pcre_reseted) = 1; } } @@ -2316,10 +2321,6 @@ static void accel_deactivate(void) zend_string_release(ZCG(cwd)); ZCG(cwd) = NULL; } - - if (!ZCG(enabled) || !accel_startup_ok) { - return; - } } static int accelerator_remove_cb(zend_extension *element1, zend_extension *element2) |
