diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-06-29 17:45:56 +0300 | 
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-06-29 18:01:01 +0300 | 
| commit | dc588997e202b5a645052bfb21098cc571693569 (patch) | |
| tree | 66aceac384c10bb62de46c81982b1929ea7337da | |
| parent | edb3ab2a2a70ea2c9616b339382c977dbdf1a2ec (diff) | |
| download | php-git-dc588997e202b5a645052bfb21098cc571693569.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 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; | 
