Hans Leidekker : secur32: Use a pthread mutex in the macOS backend.
Alexandre Julliard
julliard at winehq.org
Fri May 7 15:42:03 CDT 2021
Module: wine
Branch: master
Commit: a84b02992b75501742b4ebcb9031f06b20ecb84b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a84b02992b75501742b4ebcb9031f06b20ecb84b
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri May 7 11:54:40 2021 +0200
secur32: Use a pthread mutex in the macOS backend.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/secur32/Makefile.in | 2 +-
dlls/secur32/schannel_macosx.c | 17 ++++++++---------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/dlls/secur32/Makefile.in b/dlls/secur32/Makefile.in
index 89a7c8bd078..a5aa3b52691 100644
--- a/dlls/secur32/Makefile.in
+++ b/dlls/secur32/Makefile.in
@@ -3,7 +3,7 @@ IMPORTLIB = secur32
IMPORTS = advapi32
DELAYIMPORTS = crypt32
EXTRAINCL = $(GNUTLS_CFLAGS)
-EXTRALIBS = $(SECURITY_LIBS)
+EXTRALIBS = $(SECURITY_LIBS) $(PTHREAD_LIBS)
C_SRCS = \
lsa.c \
diff --git a/dlls/secur32/schannel_macosx.c b/dlls/secur32/schannel_macosx.c
index ab97615014d..841f928eef3 100644
--- a/dlls/secur32/schannel_macosx.c
+++ b/dlls/secur32/schannel_macosx.c
@@ -23,6 +23,7 @@
#include "wine/port.h"
#include <stdarg.h>
+#include <pthread.h>
#ifdef HAVE_SECURITY_SECURITY_H
#include <Security/Security.h>
#define GetCurrentThread GetCurrentThread_Mac
@@ -190,10 +191,9 @@ struct mac_session {
SSLContextRef context;
struct schan_transport *transport;
enum schan_mode mode;
- CRITICAL_SECTION cs;
+ pthread_mutex_t mutex;
};
-
enum {
schan_proto_SSL,
schan_proto_TLS,
@@ -760,8 +760,7 @@ BOOL schan_imp_create_session(schan_imp_session *session, schan_credentials *cre
if (!s)
return FALSE;
- InitializeCriticalSection(&s->cs);
- s->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": mac_session.cs");
+ pthread_mutex_init(&s->mutex, NULL);
status = SSLNewContext(cred->credential_use == SECPKG_CRED_INBOUND, &s->context);
if (status != noErr)
@@ -826,7 +825,7 @@ void schan_imp_dispose_session(schan_imp_session session)
status = SSLDisposeContext(s->context);
if (status != noErr)
ERR("Failed to dispose of session context: %d\n", status);
- DeleteCriticalSection(&s->cs);
+ pthread_mutex_destroy(&s->mutex);
heap_free(s);
}
@@ -1124,13 +1123,13 @@ SECURITY_STATUS schan_imp_send(schan_imp_session session, const void *buffer,
TRACE("(%p/%p, %p, %p/%lu)\n", s, s->context, buffer, length, *length);
- EnterCriticalSection(&s->cs);
+ pthread_mutex_lock(&s->mutex);
s->mode = schan_mode_WRITE;
status = SSLWrite(s->context, buffer, *length, length);
s->mode = schan_mode_NONE;
- LeaveCriticalSection(&s->cs);
+ pthread_mutex_unlock(&s->mutex);
if (status == noErr)
TRACE("Wrote %lu bytes\n", *length);
@@ -1161,13 +1160,13 @@ SECURITY_STATUS schan_imp_recv(schan_imp_session session, void *buffer,
TRACE("(%p/%p, %p, %p/%lu)\n", s, s->context, buffer, length, *length);
- EnterCriticalSection(&s->cs);
+ pthread_mutex_lock(&s->mutex);
s->mode = schan_mode_READ;
status = SSLRead(s->context, buffer, *length, length);
s->mode = schan_mode_NONE;
- LeaveCriticalSection(&s->cs);
+ pthread_mutex_unlock(&s->mutex);
if (status == noErr || status == errSSLClosedGraceful)
TRACE("Read %lu bytes\n", *length);
More information about the wine-cvs
mailing list