diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-06-29 17:45:56 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-06-29 17:45:56 +0300 |
commit | ee1e67fae6f649894721a5293ad9ab290add121f (patch) | |
tree | bcba132f249e9d48570f5942766a626cbf91b15a | |
parent | 2e85e6d3eec94b9500ae07dfe896de379558e883 (diff) | |
download | php-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.c | 16 |
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; |