From: Dmitry Stogov Date: Mon, 29 Jun 2015 14:45:56 +0000 (+0300) Subject: On Windows PHP may be restarted with different set of DSO extensions without SHM... X-Git-Tag: php-7.1.0alpha3~25^2~109 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc588997e202b5a645052bfb21098cc571693569;p=php 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. --- diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c index ec6cf15c7f..2ae6b79b50 100644 --- a/ext/opcache/Optimizer/pass1_5.c +++ b/ext/opcache/Optimizer/pass1_5.c @@ -444,9 +444,13 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx) zend_string *lc_name = zend_string_tolower( Z_STR(ZEND_OP1_LITERAL(send1_opline))); - if ((func = zend_hash_find_ptr(EG(function_table), lc_name)) != NULL && - func->type == ZEND_INTERNAL_FUNCTION && - func->module->type == MODULE_PERSISTENT) { + if ((func = zend_hash_find_ptr(EG(function_table), lc_name)) != NULL + && func->type == ZEND_INTERNAL_FUNCTION + && func->module->type == MODULE_PERSISTENT +#ifdef ZEND_WIN32 + && func->module->handle == NULL +#endif + ) { zval t; if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("is_callable") - 1 || func->handler != ZEND_FN(display_disabled_function)) { @@ -483,7 +487,11 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx) ZVAL_FALSE(&t); } } else { - if (m->type == MODULE_PERSISTENT) { + if (m->type == MODULE_PERSISTENT +#ifdef ZEND_WIN32 + && m->handle == NULL +#endif + ) { ZVAL_TRUE(&t); } else { break;