]> granicus.if.org Git - php/commitdiff
Fixed process synchronisation problem, that may cause crashes after opcache restart
authorDmitry Stogov <dmitry@zend.com>
Wed, 17 Feb 2016 10:58:05 +0000 (13:58 +0300)
committerAnatol Belski <ab@php.net>
Wed, 24 Feb 2016 09:54:37 +0000 (10:54 +0100)
ext/opcache/ZendAccelerator.c
ext/opcache/ZendAccelerator.h
ext/opcache/zend_accelerator_module.c

index 9e606f0ae5729e3071981afb247d3e262a261dfb..addfe87ab5fdce38ec5b77709871649ff281f330 100644 (file)
@@ -2278,6 +2278,19 @@ static void zend_accel_fast_shutdown(void)
 }
 #endif
 
+int accel_post_deactivate(void)
+{
+       if (!ZCG(enabled) || !accel_startup_ok) {
+               return SUCCESS;
+       }
+
+       zend_shared_alloc_safe_unlock(); /* be sure we didn't leave cache locked */
+       accel_unlock_all();
+       ZCG(counted) = 0;
+
+       return SUCCESS;
+}
+
 static void accel_deactivate(void)
 {
        /* ensure that we restore function_table and class_table
@@ -2294,10 +2307,6 @@ static void accel_deactivate(void)
                return;
        }
 
-       zend_shared_alloc_safe_unlock(); /* be sure we didn't leave cache locked */
-       accel_unlock_all();
-       ZCG(counted) = 0;
-
 #if !ZEND_DEBUG
        if (ZCG(accel_directives).fast_shutdown && is_zend_mm()) {
                zend_accel_fast_shutdown();
index ca2b9f64f13aa7b32e43e38072ebb56030339f3b..89664a2a23fe5b43547bb9d3eb588972e2eeb887 100644 (file)
@@ -318,6 +318,7 @@ extern zend_accel_globals accel_globals;
 extern char *zps_api_failure_reason;
 
 void accel_shutdown(void);
+int  accel_post_deactivate(void);
 void zend_accel_schedule_restart(zend_accel_restart_reason reason);
 void zend_accel_schedule_restart_if_necessary(zend_accel_restart_reason reason);
 accel_time_t zend_get_file_handle_timestamp(zend_file_handle *file_handle, size_t *size);
index 894ea08ac8f8b6b2ec2ea5a97ce0320d2eb8f232..2fabc8cb3c72ef1b686f3214c928e64150cbd810 100644 (file)
@@ -516,7 +516,9 @@ static zend_module_entry accel_module_entry = {
        NULL,
        zend_accel_info,
        ACCELERATOR_VERSION "FE",
-       STANDARD_MODULE_PROPERTIES
+       NO_MODULE_GLOBALS,
+       accel_post_deactivate,
+       STANDARD_MODULE_PROPERTIES_EX
 };
 
 int start_accel_module(void)