From 393032c64fc33199bb70c3352bd3280ce02410d9 Mon Sep 17 00:00:00 2001 From: Clifford Allan Jansen Date: Wed, 5 Feb 2014 06:46:44 +0000 Subject: QPID-5540: use mutex to ensure single SCHANNEL_SHUTDOWN git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1564644 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp | 16 ++++++++++------ qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h | 2 ++ 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp b/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp index a733ece74c..00fd96b6ef 100644 --- a/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp +++ b/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp @@ -182,15 +182,19 @@ void SslAsynchIO::notifyPendingWrite() { } void SslAsynchIO::queueWriteClose() { - if (state == Negotiating) { - // Never got going, so don't bother trying to close SSL down orderly. + { + qpid::sys::Mutex::ScopedLock l(lock); + if (state == Negotiating) { + // Never got going, so don't bother trying to close SSL down orderly. + state = ShuttingDown; + aio->queueWriteClose(); + return; + } + if (state == ShuttingDown) + return; state = ShuttingDown; - aio->queueWriteClose(); - return; } - state = ShuttingDown; - DWORD shutdown = SCHANNEL_SHUTDOWN; SecBuffer shutBuff; shutBuff.cbBuffer = sizeof(DWORD); diff --git a/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h b/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h index f80285c305..aab5c0021e 100644 --- a/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h +++ b/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h @@ -26,6 +26,7 @@ #include "qpid/sys/IntegerTypes.h" #include "qpid/sys/Poller.h" #include "qpid/CommonImportExport.h" +#include "qpid/sys/Mutex.h" #include #include #include @@ -86,6 +87,7 @@ protected: // AsynchIO layer below that's actually doing the I/O qpid::sys::AsynchIO *aio; + Mutex lock; // Track what the state of the SSL session is. Have to know when it's // time to notify the upper layer that the session is up, and also to -- cgit v1.2.1