diff options
author | Dmitry Stogov <dmitry@zend.com> | 2013-12-23 12:46:30 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2013-12-23 12:46:30 +0400 |
commit | 0dcaf0f445a4084f3dbb37411b6acead4658c5f5 (patch) | |
tree | e691f80c2d81caed7e4816d94eaa97726ac1dc96 | |
parent | 704866d6fdbccb74ecf2a4feb54ce7787bdf0c16 (diff) | |
download | php-git-0dcaf0f445a4084f3dbb37411b6acead4658c5f5.tar.gz |
Fixed Issue #140: "opcache.enable_file_override" doesn't respect "opcache.revalidate_freq"
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.c | 2 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.h | 1 | ||||
-rw-r--r-- | ext/opcache/tests/issue0140.phpt | 43 | ||||
-rw-r--r-- | ext/opcache/zend_accelerator_module.c | 6 |
5 files changed, 51 insertions, 3 deletions
@@ -41,6 +41,8 @@ PHP NEWS - OPCache: . Fixed reavlidate_path=1 behavior to avoid caching of symlinks values. (Dmitry) + . Fixed Issue #140: "opcache.enable_file_override" doesn't respect + "opcache.revalidate_freq". (Dmitry). - SNMP: . Fixed SNMP_ERR_TOOBIG handling for bulk walk operations. (Boris Lytochkin) diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index be56235929..9662c9912c 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -877,7 +877,7 @@ static inline int do_validate_timestamps(zend_persistent_script *persistent_scri return FAILURE; } -static inline int validate_timestamp_and_record(zend_persistent_script *persistent_script, zend_file_handle *file_handle TSRMLS_DC) +int validate_timestamp_and_record(zend_persistent_script *persistent_script, zend_file_handle *file_handle TSRMLS_DC) { if (ZCG(accel_directives).revalidate_freq && (persistent_script->dynamic_members.revalidate >= ZCSG(revalidate_at))) { diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index cbc50d2b71..dbda3b3822 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -330,6 +330,7 @@ extern char *zps_api_failure_reason; void accel_shutdown(TSRMLS_D); void zend_accel_schedule_restart(zend_accel_restart_reason reason TSRMLS_DC); void zend_accel_schedule_restart_if_necessary(zend_accel_restart_reason reason TSRMLS_DC); +int validate_timestamp_and_record(zend_persistent_script *persistent_script, zend_file_handle *file_handle TSRMLS_DC); int zend_accel_invalidate(const char *filename, int filename_len, zend_bool force TSRMLS_DC); int accelerator_shm_read_lock(TSRMLS_D); void accelerator_shm_read_unlock(TSRMLS_D); diff --git a/ext/opcache/tests/issue0140.phpt b/ext/opcache/tests/issue0140.phpt new file mode 100644 index 0000000000..7c0d6b92b3 --- /dev/null +++ b/ext/opcache/tests/issue0140.phpt @@ -0,0 +1,43 @@ +--TEST--
+Issue #140: "opcache.enable_file_override" doesn't respect "opcache.revalidate_freq"
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.revalidate_freq=0
+opcache.file_update_protection=0
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+<?php if (php_sapi_name() != "cli") die("skip CLI only"); ?>
+--FILE--
+<?php
+define("FILENAME", dirname(__FILE__) . "/issuer0140.inc.php");
+file_put_contents(FILENAME, "1\n");
+
+var_dump(is_readable(FILENAME));
+include(FILENAME);
+var_dump(filemtime(FILENAME));
+
+sleep(2);
+file_put_contents(FILENAME, "2\n");
+
+var_dump(is_readable(FILENAME));
+include(FILENAME);
+var_dump(filemtime(FILENAME));
+
+sleep(2);
+unlink(FILENAME);
+
+var_dump(is_readable(FILENAME));
+var_dump(@include(FILENAME));
+var_dump(@filemtime(FILENAME));
+?>
+--EXPECTF--
+bool(true)
+1
+int(%d)
+bool(true)
+2
+int(%d)
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index c3df1a68f7..36d02cc072 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -313,13 +313,15 @@ static int filename_is_in_cache(char *filename, int filename_len TSRMLS_DC) if (IS_ABSOLUTE_PATH(filename, filename_len)) { persistent_script = zend_accel_hash_find(&ZCSG(hash), filename, filename_len + 1); if (persistent_script) { - return !persistent_script->corrupted; + return !persistent_script->corrupted && + validate_timestamp_and_record(persistent_script, &handle TSRMLS_CC) == SUCCESS; } } if ((key = accel_make_persistent_key_ex(&handle, filename_len, &key_length TSRMLS_CC)) != NULL) { persistent_script = zend_accel_hash_find(&ZCSG(hash), key, key_length + 1); - return persistent_script && !persistent_script->corrupted; + return persistent_script && !persistent_script->corrupted && + validate_timestamp_and_record(persistent_script, &handle TSRMLS_CC) == SUCCESS; } return 0; |