]> granicus.if.org Git - apache/commitdiff
Win32: Use atomic increment/decrement on counters touched by multiple threads.
authorBill Stoddard <stoddard@apache.org>
Fri, 24 May 2002 16:56:39 +0000 (16:56 +0000)
committerBill Stoddard <stoddard@apache.org>
Fri, 24 May 2002 16:56:39 +0000 (16:56 +0000)
I intentionally did not use atomic operators on the Win9* code paths.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95267 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/winnt/mpm_winnt.c

index f9c7614cefaeead61c2aee376b9b9c3b8b74adf3..87b125b5548f483251d34897bee8150e51c5f829 100644 (file)
@@ -76,6 +76,7 @@
 #include "mpm_winnt.h"
 #include "mpm_common.h"
 #include <malloc.h>
+#include "apr_atomic.h"
 
 /* Limit on the threads per process.  Clients will be locked out if more than
  * this  * HARD_SERVER_LIMIT are needed.
@@ -281,7 +282,7 @@ AP_DECLARE(PCOMP_CONTEXT) mpm_get_completion_context(void)
 
         context->accept_socket = INVALID_SOCKET;
         context->ba = apr_bucket_alloc_create(pchild);
-        num_completion_contexts++;
+        apr_atomic_inc(&num_completion_contexts);
     }
 
     return context;
@@ -1068,10 +1069,10 @@ static PCOMP_CONTEXT winnt_get_connection(PCOMP_CONTEXT context)
 
     mpm_recycle_completion_context(context);
 
-    g_blocked_threads++;        
+    apr_atomic_inc(&g_blocked_threads);
     while (1) {
         if (workers_may_exit) {
-            g_blocked_threads--;
+            apr_atomic_dec(&g_blocked_threads);
             return NULL;
         }
         rc = GetQueuedCompletionStatus(ThreadDispatchIOCP, &BytesRead, &CompKey,
@@ -1088,16 +1089,15 @@ static PCOMP_CONTEXT winnt_get_connection(PCOMP_CONTEXT context)
             context = CONTAINING_RECORD(pol, COMP_CONTEXT, Overlapped);
             break;
         case IOCP_SHUTDOWN:
-            g_blocked_threads--;
+            apr_atomic_dec(&g_blocked_threads);
             return NULL;
         default:
-            g_blocked_threads--;
+            apr_atomic_dec(&g_blocked_threads);
             return NULL;
         }
         break;
     }
-
-    g_blocked_threads--;    
+    apr_atomic_dec(&g_blocked_threads);
 
     return context;
 }