summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-06-29 17:45:56 +0300
committerDmitry Stogov <dmitry@zend.com>2015-06-29 17:45:56 +0300
commitee1e67fae6f649894721a5293ad9ab290add121f (patch)
treebcba132f249e9d48570f5942766a626cbf91b15a
parent2e85e6d3eec94b9500ae07dfe896de379558e883 (diff)
downloadphp-git-ee1e67fae6f649894721a5293ad9ab290add121f.tar.gz
On Windows PHP may be restarted with different set of DSO extensions without SHM reset.
This may make optimisation for entities from DSO extensions inconsistent.
-rw-r--r--ext/opcache/Optimizer/pass1_5.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c
index f4091921b3..4ed3dd4c85 100644
--- a/ext/opcache/Optimizer/pass1_5.c
+++ b/ext/opcache/Optimizer/pass1_5.c
@@ -376,9 +376,13 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
Z_STRVAL(ZEND_OP1_LITERAL(opline - 1)), Z_STRLEN(ZEND_OP1_LITERAL(opline - 1)));
if (zend_hash_find(EG(function_table), lc_name, Z_STRLEN(ZEND_OP1_LITERAL(opline - 1)) + 1,
- (void *)&func) == SUCCESS &&
- func->type == ZEND_INTERNAL_FUNCTION &&
- func->module->type == MODULE_PERSISTENT) {
+ (void *)&func) == SUCCESS
+ && func->type == ZEND_INTERNAL_FUNCTION
+ && func->module->type == MODULE_PERSISTENT
+#ifdef ZEND_WIN32
+ && func->module->handle == NULL
+#endif
+ ) {
zval t;
if (Z_STRLEN(ZEND_OP1_LITERAL(opline)) == sizeof("is_callable") - 1 ||
func->handler != ZEND_FN(display_disabled_function)) {
@@ -412,7 +416,11 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
ZVAL_BOOL(&t, 0);
}
} else {
- if (m->type == MODULE_PERSISTENT) {
+ if (m->type == MODULE_PERSISTENT
+#ifdef ZEND_WIN32
+ && m->handle == NULL
+#endif
+ ) {
ZVAL_BOOL(&t, 1);
} else {
break;