Viewing file: threadstest.h (1.44 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */
#if defined(_WIN32) # include <windows.h> #endif
#include <string.h> #include "testutil.h"
#if !defined(OPENSSL_THREADS) || defined(CRYPTO_TDEBUG)
typedef unsigned int thread_t;
static int run_thread(thread_t *t, void (*f)(void)) { f(); return 1; }
static int wait_for_thread(thread_t thread) { return 1; }
#elif defined(OPENSSL_SYS_WINDOWS)
typedef HANDLE thread_t;
static DWORD WINAPI thread_run(LPVOID arg) { void (*f)(void);
*(void **) (&f) = arg;
f(); return 0; }
static int run_thread(thread_t *t, void (*f)(void)) { *t = CreateThread(NULL, 0, thread_run, *(void **) &f, 0, NULL); return *t != NULL; }
static int wait_for_thread(thread_t thread) { return WaitForSingleObject(thread, INFINITE) == 0; }
#else
typedef pthread_t thread_t;
static void *thread_run(void *arg) { void (*f)(void);
*(void **) (&f) = arg;
f(); return NULL; }
static int run_thread(thread_t *t, void (*f)(void)) { return pthread_create(t, NULL, thread_run, *(void **) &f) == 0; }
static int wait_for_thread(thread_t thread) { return pthread_join(thread, NULL) == 0; }
#endif
|