]> granicus.if.org Git - php/commitdiff
Fixed bug #5453 (WSA cleanup executes before MSHUTDOWN)
authorKalle Sommer Nielsen <kalle@php.net>
Sat, 6 Aug 2016 02:06:50 +0000 (04:06 +0200)
committerKalle Sommer Nielsen <kalle@php.net>
Sat, 6 Aug 2016 02:06:50 +0000 (04:06 +0200)
This moves the WSACleanup() call to after zend_shutdown() in main.c, I did some testing and I could not find any issues with this. I don't expect this to cause any issues on Netware either, although untested as I do not have such an env available (do we even support Netware anymore? Last release was in 2009 and it is now discontinued)

Besides the movie, then this commit also contains a fix to the check of WSAStartup() where we don't actually confirm we get the desired version of the winsock.dll (We use 2.0).

NEWS
main/main.c

diff --git a/NEWS b/NEWS
index 929eb33fc64ac0c8cfbb6bf91df0a8dadec6b97f..c979e645129297345f7222528afaa79be67e06e7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2016, PHP 7.2.0alpha1
 
+- Core:
+  . Fixed bug #54535 (WSA cleanup executes before MSHUTDOWN). (Kalle)
+
 - EXIF:
   . Added support for vendor specific tags for the following formats: Sony, 
     Samsung, DJI & Panasonic. (Kalle)
index 0a1127176e7586a6804b76cebcb7470367fe47c1..248341c11412b7781c6294cee7a0d085d497167e 100644 (file)
@@ -2137,6 +2137,11 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod
                php_printf("\nwinsock.dll unusable. %d\n", WSAGetLastError());
                return FAILURE;
        }
+       /* Check that we actually got the requested WSA version */
+       if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0) {
+               php_printf("\nwinsock.dll unusable. Requested version: %d.%d, got %d.%d", LOBYTE(wVersionRequested), HIBYTE(wVersionRequested), LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
+               return FAILURE;
+       }
 #endif
 
        le_index_ptr = zend_register_list_destructors_ex(NULL, NULL, "index pointer", 0);
@@ -2387,11 +2392,6 @@ void php_module_shutdown(void)
        ts_free_worker_threads();
 #endif
 
-#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK))
-       /*close winsock */
-       WSACleanup();
-#endif
-
 #ifdef PHP_WIN32
        php_win32_free_rng_lock();
 #endif
@@ -2400,6 +2400,11 @@ void php_module_shutdown(void)
 
        zend_shutdown();
 
+#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK))
+       /*close winsock */
+       WSACleanup();
+#endif
+
        /* Destroys filter & transport registries too */
        php_shutdown_stream_wrappers(module_number);