shane           Sun Oct 13 03:23:17 2002 EDT

  Modified files:              
    /php4/sapi/cgi/libfcgi      os_win32.c 
  Log:
  fix shutdown issues
  
  
Index: php4/sapi/cgi/libfcgi/os_win32.c
diff -u php4/sapi/cgi/libfcgi/os_win32.c:1.5 php4/sapi/cgi/libfcgi/os_win32.c:1.6
--- php4/sapi/cgi/libfcgi/os_win32.c:1.5        Sun Oct 13 01:55:03 2002
+++ php4/sapi/cgi/libfcgi/os_win32.c    Sun Oct 13 03:23:17 2002
@@ -17,7 +17,7 @@
  *  significantly more enjoyable.)
  */
 #ifndef lint
-static const char rcsid[] = "$Id: os_win32.c,v 1.5 2002/10/13 05:55:03 shane Exp $";
+static const char rcsid[] = "$Id: os_win32.c,v 1.6 2002/10/13 07:23:17 shane Exp $";
 #endif /* not lint */
 
 #define WIN32_LEAN_AND_MEAN 
@@ -271,24 +271,14 @@
 static DWORD WINAPI ShutdownRequestThread(LPVOID arg)
 {
     HANDLE shutdownEvent = (HANDLE) arg;
-    
-    if (WaitForSingleObject(shutdownEvent, INFINITE) == WAIT_FAILED)
-    {
-        // Assuming it will happen again, all we can do is exit the thread
-        return 1;
-    }
-    else
-    {
-        // "Simple reads and writes to properly-aligned 32-bit variables are atomic"
-        shutdownPending = TRUE;
-        
-        // Before an accept() is entered the shutdownPending flag is checked.
-        // If set, OS_Accept() will return -1.  If not, it waits
-        // on a connection request for one second, checks the flag, & repeats.
-        // Only one process/thread is allowed to do this at time by
-        // wrapping the accept() with mutex.
-        return 0;
-    }
+    WaitForSingleObject(shutdownEvent, INFINITE);
+    shutdownPending = TRUE;
+    // Before an accept() is entered the shutdownPending flag is checked.
+    // If set, OS_Accept() will return -1.  If not, it waits
+    // on a connection request for one second, checks the flag, & repeats.
+    // Only one process/thread is allowed to do this at time by
+    // wrapping the accept() with mutex.
+    return 0;
 }
 
 int OS_SetImpersonate(void)
@@ -1923,8 +1913,12 @@
     
     if (acceptMutex != INVALID_HANDLE_VALUE) 
     {
-        if (WaitForSingleObject(acceptMutex, INFINITE) == WAIT_FAILED) 
+               DWORD ret;
+        while ((ret = WaitForSingleObject(acceptMutex, ACCEPT_TIMEOUT)) == 
+WAIT_TIMEOUT) 
         {
+                       if (shutdownPending) break;
+               }
+               if (ret == WAIT_FAILED) {
             printLastError("WaitForSingleObject() failed");
             return -1;
         }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to