]> granicus.if.org Git - php/commitdiff
On Windows PHP may be restarted with different set of DSO extensions without SHM...
authorDmitry Stogov <dmitry@zend.com>
Mon, 29 Jun 2015 14:45:56 +0000 (17:45 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 29 Jun 2015 15:01:01 +0000 (18:01 +0300)
This may make optimisation for entities from DSO extensions inconsistent.

ext/opcache/Optimizer/pass1_5.c

index ec6cf15c7f6798bf32dfe548dd04f202b144a214..2ae6b79b50f7230ab0cbf99369d49171af559b3b 100644 (file)
@@ -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;