Refactor HAVE_PTHREAD and _POSIX_THREADS (#6536)

* HAVE_PTHREAD gate in test.h
* add config.h and settings.h to test.h
* added config.h and settings.h to other test.h in wolfcrypt/test
* settings #ifdef _POSIX_THREADS HAVE_PTHREAD
* cyassl settings _POSIX_THREADS HAVE_PTHREAD
* undo cyassl _POSIX_THREADS HAVE_PTHREAD
* move settings.h #include in both test.h
* add !defined(SINGLE_THREADED) logic
* refactor  HAVE_PTHREAD, _POSIX_THREADS
This commit is contained in:
gojimmypi
2023-06-26 07:32:20 -07:00
committed by GitHub
parent 18032cdc40
commit 6b240fa41a
12 changed files with 85 additions and 46 deletions

View File

@@ -66,8 +66,17 @@ Or
#endif
/* PTHREAD requires server and client enabled */
#if defined(HAVE_PTHREAD) && (defined(NO_WOLFSSL_CLIENT) || defined(NO_WOLFSSL_SERVER))
#undef HAVE_PTHREAD
#if defined(NO_WOLFSSL_CLIENT) || defined(NO_WOLFSSL_SERVER)
#if defined(HAVE_PTHREAD)
#ifdef __GNUC__ /* GCC compiler */
#pragma message "PTHREAD requires server and client enabled."
#elif defined(_MSC_VER) /* Microsoft Visual C++ compiler */
#pragma message("PTHREAD requires server and client enabled.")
#else
#warning "PTHREAD requires server and client enabled."
#endif
#undef HAVE_PTHREAD
#endif
#endif
#ifdef HAVE_PTHREAD

View File

@@ -1740,7 +1740,7 @@ static int client_srtp_test(WOLFSSL *ssl, func_args *args)
size_t srtp_secret_length;
byte *srtp_secret, *p;
int ret;
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#ifdef HAVE_PTHREAD
srtp_test_helper *srtp_helper = args->srtp_helper;
byte *other_secret = NULL;
size_t other_size = 0;
@@ -1774,7 +1774,7 @@ static int client_srtp_test(WOLFSSL *ssl, func_args *args)
printf("%02X", *p);
printf("\n");
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#ifdef HAVE_PTHREAD
if (srtp_helper != NULL) {
srtp_helper_get_ekm(srtp_helper, &other_secret, &other_size);
@@ -1790,7 +1790,7 @@ static int client_srtp_test(WOLFSSL *ssl, func_args *args)
/* we are delegated from server to free this buffer */
XFREE(other_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
}
#endif
#endif /* HAVE_PTHREAD */
XFREE(srtp_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
@@ -4546,7 +4546,7 @@ exit:
StartTCP();
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
args.srtp_helper = NULL;
#endif
args.argc = argc;

View File

@@ -67,7 +67,7 @@
static void SignalReady(void* args, word16 port)
{
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER) && !defined(__MINGW32__)
#if defined(NO_MAIN_DRIVER) && defined(HAVE_PTHREAD)
/* signal ready to tcp_accept */
func_args* server_args = (func_args*)args;
tcp_ready* ready = server_args->signal;
@@ -76,7 +76,7 @@ static void SignalReady(void* args, word16 port)
ready->port = port;
PTHREAD_CHECK_RET(pthread_cond_signal(&ready->cond));
PTHREAD_CHECK_RET(pthread_mutex_unlock(&ready->mutex));
#endif
#endif /* NO_MAIN_DRIVER && HAVE_PTHREAD */
(void)args;
(void)port;
}

View File

@@ -1319,7 +1319,7 @@ static int server_srtp_test(WOLFSSL *ssl, func_args *args)
size_t srtp_secret_length;
byte *srtp_secret, *p;
int ret;
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#ifdef HAVE_PTHREAD
srtp_test_helper *srtp_helper = args->srtp_helper;
#else
(void)args;
@@ -1351,7 +1351,7 @@ static int server_srtp_test(WOLFSSL *ssl, func_args *args)
printf("%02X", *p);
printf("\n");
#if !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#ifdef HAVE_PTHREAD
if (srtp_helper != NULL) {
srtp_helper_set_ekm(srtp_helper, srtp_secret, srtp_secret_length);
@@ -1359,7 +1359,7 @@ static int server_srtp_test(WOLFSSL *ssl, func_args *args)
correctness */
return 0;
}
#endif /* _POSIX_THREADS */
#endif /* HAVE_PTHREAD */
XFREE(srtp_secret, NULL, DYNAMIC_TYPE_TMP_BUFFER);
return 0;
@@ -3807,7 +3807,7 @@ exit:
args.argv = argv;
args.signal = &ready;
args.return_code = 0;
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
args.srtp_helper = NULL;
#endif
InitTcpReady(&ready);

View File

@@ -329,7 +329,7 @@ static int execute_test_case(int svr_argc, char** svr_argv,
int reqClientCert;
#endif
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
srtp_test_helper srtp_helper;
#endif
/* Is Valid Cipher and Version Checks */
@@ -460,7 +460,7 @@ static int execute_test_case(int svr_argc, char** svr_argv,
InitTcpReady(&ready);
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
srtp_helper_init(&srtp_helper);
cliArgs.srtp_helper = &srtp_helper;
svrArgs.srtp_helper = &srtp_helper;
@@ -580,7 +580,7 @@ static int execute_test_case(int svr_argc, char** svr_argv,
#endif
FreeTcpReady(&ready);
#if defined (WOLFSSL_SRTP) &&!defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined (WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
srtp_helper_free(&srtp_helper);
#endif

View File

@@ -275,9 +275,7 @@ exit:
void wait_tcp_ready(func_args* args)
{
#ifdef SINGLE_THREADED
(void)args;
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
#ifdef HAVE_PTHREAD
PTHREAD_CHECK_RET(pthread_mutex_lock(&args->signal->mutex));
if (!args->signal->ready)
@@ -287,6 +285,7 @@ void wait_tcp_ready(func_args* args)
PTHREAD_CHECK_RET(pthread_mutex_unlock(&args->signal->mutex));
#else
/* no threading wait or single threaded */
(void)args;
#endif
}
@@ -294,11 +293,11 @@ void wait_tcp_ready(func_args* args)
void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
{
#ifdef SINGLE_THREADED
#if defined(SINGLE_THREADED)
(void)fun;
(void)args;
(void)thread;
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
#elif defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_create(thread, 0, fun, args));
return;
#elif defined (WOLFSSL_TIRTOS)
@@ -313,6 +312,7 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
}
Task_yield();
#else
/* custom / external thread type */
*thread = (THREAD_TYPE)_beginthreadex(0, 0, fun, args, 0, 0);
#endif
}
@@ -320,9 +320,9 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
void join_thread(THREAD_TYPE thread)
{
#ifdef SINGLE_THREADED
#if defined(SINGLE_THREADED)
(void)thread;
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
#elif defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_join(thread, 0));
#elif defined (WOLFSSL_TIRTOS)
while(1) {

View File

@@ -431,7 +431,7 @@ static void simple_test(func_args* args)
*/
void wait_tcp_ready(func_args* args)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_mutex_lock(&args->signal->mutex));
if (!args->signal->ready)
@@ -459,7 +459,7 @@ void wait_tcp_ready(func_args* args)
(void)args;
#else
(void)args;
#endif
#endif /* thread checks */
}
@@ -471,7 +471,7 @@ void wait_tcp_ready(func_args* args)
*/
void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_create(thread, 0, fun, args));
return;
#elif defined(WOLFSSL_TIRTOS)
@@ -527,10 +527,11 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
{
printf("Ethernet Bypass Application: failed to create idle thread!\n");
}
/* end if NETOS */
#else
/* custom / external thread type */
*thread = (THREAD_TYPE)_beginthreadex(0, 0, fun, args, 0, 0);
#endif
#endif /* thread types */
}
@@ -540,7 +541,7 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread)
*/
void join_thread(THREAD_TYPE thread)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_join(thread, 0));
#elif defined(WOLFSSL_TIRTOS)
while(1) {

View File

@@ -874,8 +874,7 @@ static WC_INLINE word64 Entropy_TimeHiRes(void)
return now.tv_nsec;
}
#elif !defined(SINGLE_THREADED) && defined(_POSIX_THREADS) && \
!defined(__MINGW32__)
#elif defined(HAVE_PTHREAD)
/* Start and stop thread that counts as a proxy for time counter. */
#define ENTROPY_MEMUSE_THREADED
@@ -983,7 +982,7 @@ static void Entropy_StopThread(void)
entropy_thread_started = 0;
}
}
/* end if defined(HAVE_PTHREAD) */
#else
#error "No high precision time available for MemUse Entropy."

View File

@@ -35,6 +35,11 @@
typedef sword32 wc_test_ret_t;
#endif
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#ifdef HAVE_STACK_SIZE
THREAD_RETURN WOLFSSL_THREAD wolfcrypt_test(void* args);
#else

View File

@@ -28,6 +28,11 @@
#ifndef wolfSSL_TEST_H
#define wolfSSL_TEST_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#ifdef FUSION_RTOS
#include <fclstdio.h>
#include <fclstdlib.h>
@@ -182,7 +187,9 @@
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <pthread.h>
#ifdef HAVE_PTHREAD
#include <pthread.h>
#endif
#include <fcntl.h>
#ifdef TEST_IPV6
#include <netdb.h>
@@ -529,7 +536,7 @@ typedef struct tcp_ready {
word16 ready; /* predicate */
word16 port;
char* srfName; /* server ready file name */
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
#ifdef HAVE_PTHREAD
pthread_mutex_t mutex;
pthread_cond_t cond;
#endif
@@ -543,12 +550,13 @@ static WC_INLINE void InitTcpReady(tcp_ready* ready)
ready->ready = 0;
ready->port = 0;
ready->srfName = NULL;
#ifdef SINGLE_THREADED
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_mutex_init(&ready->mutex, 0));
PTHREAD_CHECK_RET(pthread_cond_init(&ready->cond, 0));
#elif defined(NETOS)
tx_mutex_create(&ready->mutex, "wolfSSL Lock", TX_INHERIT);
#else
/* no threading init or single threaded */
#endif
}
@@ -558,9 +566,7 @@ static WC_INLINE void InitTcpReady(tcp_ready* ready)
static WC_INLINE void FreeTcpReady(tcp_ready* ready)
{
#ifdef SINGLE_THREADED
(void)ready;
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
PTHREAD_CHECK_RET(pthread_mutex_destroy(&ready->mutex));
PTHREAD_CHECK_RET(pthread_cond_destroy(&ready->cond));
#elif defined(NETOS)
@@ -599,14 +605,14 @@ typedef struct callback_functions {
unsigned char doUdp:1;
} callback_functions;
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
typedef struct srtp_test_helper {
pthread_mutex_t mutex;
pthread_cond_t cond;
uint8_t* server_srtp_ekm;
size_t server_srtp_ekm_size;
} srtp_test_helper;
#endif
#endif /* WOLFSSL_SRTP HAVE_PTHREAD */
typedef struct func_args {
int argc;
@@ -614,7 +620,7 @@ typedef struct func_args {
int return_code;
tcp_ready* signal;
callback_functions *callbacks;
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
srtp_test_helper* srtp_helper;
#endif
} func_args;
@@ -655,7 +661,7 @@ static const word16 wolfSSLPort = 11111;
extern int myoptind;
extern char* myoptarg;
#if defined(WOLFSSL_SRTP) && !defined(SINGLE_THREADED) && defined(_POSIX_THREADS)
#if defined(WOLFSSL_SRTP) && defined(HAVE_PTHREAD)
static WC_INLINE void srtp_helper_init(srtp_test_helper *srtp)
{
@@ -2201,7 +2207,7 @@ static WC_INLINE void udp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd,
#endif
if (args != NULL && args->signal != NULL) {
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
#if defined(HAVE_PTHREAD)
/* signal ready to accept data */
tcp_ready* ready = args->signal;
PTHREAD_CHECK_RET(pthread_mutex_lock(&ready->mutex));
@@ -2248,7 +2254,7 @@ static WC_INLINE void tcp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd,
if(do_listen) {
tcp_listen(sockfd, &port, useAnyAddr, udp, sctp);
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER) && !defined(__MINGW32__)
#if defined(NO_MAIN_DRIVER) && defined(HAVE_PTHREAD)
/* signal ready to tcp_accept */
if (args)
ready = args->signal;

View File

@@ -275,6 +275,23 @@
#include <wolfssl/wolfcrypt/visibility.h>
/* AFTER user_settings.h is loaded,
** determine if POSIX multi-threaded: HAVE_PTHREAD */
#if defined(SINGLE_THREADED) || defined(__MINGW32__)
/* Never HAVE_PTHREAD in single thread, or non-POSIX mode.
** Reminder: MING32 is win32 threads, not POSIX threads */
#undef HAVE_PTHREAD
#else
#ifdef _POSIX_THREADS
/* HAVE_PTHREAD == POSIX threads capable and enabled. */
#undef HAVE_PTHREAD
#define HAVE_PTHREAD 1
#else
/* Not manually disabled, but POSIX threads not found. */
#undef HAVE_PTHREAD
#endif
#endif
#define WOLFSSL_MAKE_FIPS_VERSION(major, minor) (((major) * 256) + (minor))
#if !defined(HAVE_FIPS)
#define WOLFSSL_FIPS_VERSION_CODE WOLFSSL_MAKE_FIPS_VERSION(0,0)

View File

@@ -31,6 +31,9 @@ decouple library dependencies with standard string, memory and so on.
#ifndef WOLF_CRYPT_TYPES_H
#define WOLF_CRYPT_TYPES_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/wolfcrypt/wc_port.h>
@@ -1351,8 +1354,7 @@ typedef struct w64wrapper {
typedef unsigned int THREAD_RETURN;
typedef size_t THREAD_TYPE;
#define WOLFSSL_THREAD
#elif (defined(_POSIX_THREADS) || defined(HAVE_PTHREAD)) && \
!defined(__MINGW32__)
#elif defined(HAVE_PTHREAD)
typedef void* THREAD_RETURN;
typedef pthread_t THREAD_TYPE;
#define WOLFSSL_THREAD