Commit 43489055 authored by Bill Stoddard's avatar Bill Stoddard
Browse files

Win32: Use atomic increment/decrement on counters touched by multiple threads.

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
parent f6447433
Loading
Loading
Loading
Loading
+7 −7
Changes for server/mpm/winnt/mpm_winnt.c: 7 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -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;
}