Reworking MINGW mutex/threading

This commit is contained in:
Lealem Amedie
2023-11-29 16:45:06 -07:00
parent 6125e595bb
commit e1ac56f2dd
4 changed files with 13 additions and 10 deletions

View File

@@ -1203,7 +1203,7 @@ static THREAD_RETURN WOLFSSL_THREAD_NO_JOIN client_thread(void* args)
THREAD_CHECK_RET(wolfSSL_CondSignal(&info->to_server.cond)); THREAD_CHECK_RET(wolfSSL_CondSignal(&info->to_server.cond));
THREAD_CHECK_RET(wolfSSL_CondEnd(&info->to_server.cond)); THREAD_CHECK_RET(wolfSSL_CondEnd(&info->to_server.cond));
WOLFSSL_RETURN_FROM_THREAD(NULL); WOLFSSL_RETURN_FROM_THREAD(0);
} }
#endif /* !SINGLE_THREADED */ #endif /* !SINGLE_THREADED */
#endif /* !NO_WOLFSSL_CLIENT */ #endif /* !NO_WOLFSSL_CLIENT */
@@ -1663,7 +1663,7 @@ static THREAD_RETURN WOLFSSL_THREAD_NO_JOIN server_thread(void* args)
THREAD_CHECK_RET(wolfSSL_CondSignal(&info->to_client.cond)); THREAD_CHECK_RET(wolfSSL_CondSignal(&info->to_client.cond));
THREAD_CHECK_RET(wolfSSL_CondEnd(&info->to_client.cond)); THREAD_CHECK_RET(wolfSSL_CondEnd(&info->to_client.cond));
WOLFSSL_RETURN_FROM_THREAD(NULL); WOLFSSL_RETURN_FROM_THREAD(0);
} }
#endif /* !SINGLE_THREADED */ #endif /* !SINGLE_THREADED */
#endif /* !NO_WOLFSSL_SERVER */ #endif /* !NO_WOLFSSL_SERVER */

View File

@@ -1489,7 +1489,7 @@ int wolfSSL_CryptHwMutexUnLock(void)
return 0; return 0;
} }
#elif defined(USE_WINDOWS_API) #elif defined(USE_WINDOWS_API) && !defined(WOLFSSL_PTHREADS)
int wc_InitMutex(wolfSSL_Mutex* m) int wc_InitMutex(wolfSSL_Mutex* m)
{ {
@@ -3426,7 +3426,7 @@ char* mystrnstr(const char* s1, const char* s2, unsigned int n)
#ifndef SINGLE_THREADED #ifndef SINGLE_THREADED
#ifdef _MSC_VER #if defined(USE_WINDOWS_API) && !defined(WOLFSSL_PTHREADS)
int wolfSSL_NewThread(THREAD_TYPE* thread, int wolfSSL_NewThread(THREAD_TYPE* thread,
THREAD_CB cb, void* arg) THREAD_CB cb, void* arg)
{ {
@@ -3450,6 +3450,7 @@ char* mystrnstr(const char* s1, const char* s2, unsigned int n)
return 0; return 0;
} }
#ifdef WOLFSSL_THREAD_NO_JOIN
int wolfSSL_NewThreadNoJoin(THREAD_CB_NOJOIN cb, void* arg) int wolfSSL_NewThreadNoJoin(THREAD_CB_NOJOIN cb, void* arg)
{ {
THREAD_TYPE thread; THREAD_TYPE thread;
@@ -3464,6 +3465,7 @@ char* mystrnstr(const char* s1, const char* s2, unsigned int n)
return 0; return 0;
} }
#endif
int wolfSSL_JoinThread(THREAD_TYPE thread) int wolfSSL_JoinThread(THREAD_TYPE thread)
{ {

View File

@@ -1377,7 +1377,7 @@ typedef struct w64wrapper {
typedef unsigned int THREAD_RETURN; typedef unsigned int THREAD_RETURN;
typedef size_t THREAD_TYPE; typedef size_t THREAD_TYPE;
#define WOLFSSL_THREAD #define WOLFSSL_THREAD
#elif (defined(_POSIX_THREADS) || defined(HAVE_PTHREAD)) #elif defined(WOLFSSL_PTHREADS)
#ifndef __MACH__ #ifndef __MACH__
#include <pthread.h> #include <pthread.h>
typedef struct COND_TYPE { typedef struct COND_TYPE {
@@ -1402,7 +1402,7 @@ typedef struct w64wrapper {
typedef unsigned int THREAD_RETURN; typedef unsigned int THREAD_RETURN;
typedef TaskHandle_t THREAD_TYPE; typedef TaskHandle_t THREAD_TYPE;
#define WOLFSSL_THREAD #define WOLFSSL_THREAD
#elif defined(_MSC_VER) #elif defined(USE_WINDOWS_API)
typedef unsigned THREAD_RETURN; typedef unsigned THREAD_RETURN;
typedef uintptr_t THREAD_TYPE; typedef uintptr_t THREAD_TYPE;
typedef struct COND_TYPE { typedef struct COND_TYPE {
@@ -1412,7 +1412,9 @@ typedef struct w64wrapper {
#define WOLFSSL_COND #define WOLFSSL_COND
#define INVALID_THREAD_VAL ((THREAD_TYPE)(INVALID_HANDLE_VALUE)) #define INVALID_THREAD_VAL ((THREAD_TYPE)(INVALID_HANDLE_VALUE))
#define WOLFSSL_THREAD __stdcall #define WOLFSSL_THREAD __stdcall
#define WOLFSSL_THREAD_NO_JOIN __cdecl #if !defined(__MINGW32__)
#define WOLFSSL_THREAD_NO_JOIN __cdecl
#endif
#else #else
typedef unsigned int THREAD_RETURN; typedef unsigned int THREAD_RETURN;
typedef size_t THREAD_TYPE; typedef size_t THREAD_TYPE;

View File

@@ -60,8 +60,7 @@
/* THREADING/MUTEX SECTION */ /* THREADING/MUTEX SECTION */
#ifdef USE_WINDOWS_API #ifdef USE_WINDOWS_API
#if defined(__MINGW32__) && !defined(SINGLE_THREADED) #if defined(WOLFSSL_PTHREADS)
#define WOLFSSL_PTHREADS
#include <pthread.h> #include <pthread.h>
#endif #endif
#ifdef WOLFSSL_GAME_BUILD #ifdef WOLFSSL_GAME_BUILD
@@ -231,7 +230,7 @@
signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES]; signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES];
xSemaphoreHandle mutex; xSemaphoreHandle mutex;
} wolfSSL_Mutex; } wolfSSL_Mutex;
#elif defined(USE_WINDOWS_API) #elif defined(USE_WINDOWS_API) && !defined(WOLFSSL_PTHREADS)
typedef CRITICAL_SECTION wolfSSL_Mutex; typedef CRITICAL_SECTION wolfSSL_Mutex;
#elif defined(MAXQ10XX_MUTEX) #elif defined(MAXQ10XX_MUTEX)
#include <sys/mman.h> #include <sys/mman.h>