113498266Sopenharmony_ci#ifndef HEADER_CURL_THREADS_H 213498266Sopenharmony_ci#define HEADER_CURL_THREADS_H 313498266Sopenharmony_ci/*************************************************************************** 413498266Sopenharmony_ci * _ _ ____ _ 513498266Sopenharmony_ci * Project ___| | | | _ \| | 613498266Sopenharmony_ci * / __| | | | |_) | | 713498266Sopenharmony_ci * | (__| |_| | _ <| |___ 813498266Sopenharmony_ci * \___|\___/|_| \_\_____| 913498266Sopenharmony_ci * 1013498266Sopenharmony_ci * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 1113498266Sopenharmony_ci * 1213498266Sopenharmony_ci * This software is licensed as described in the file COPYING, which 1313498266Sopenharmony_ci * you should have received as part of this distribution. The terms 1413498266Sopenharmony_ci * are also available at https://curl.se/docs/copyright.html. 1513498266Sopenharmony_ci * 1613498266Sopenharmony_ci * You may opt to use, copy, modify, merge, publish, distribute and/or sell 1713498266Sopenharmony_ci * copies of the Software, and permit persons to whom the Software is 1813498266Sopenharmony_ci * furnished to do so, under the terms of the COPYING file. 1913498266Sopenharmony_ci * 2013498266Sopenharmony_ci * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 2113498266Sopenharmony_ci * KIND, either express or implied. 2213498266Sopenharmony_ci * 2313498266Sopenharmony_ci * SPDX-License-Identifier: curl 2413498266Sopenharmony_ci * 2513498266Sopenharmony_ci ***************************************************************************/ 2613498266Sopenharmony_ci#include "curl_setup.h" 2713498266Sopenharmony_ci 2813498266Sopenharmony_ci#if defined(USE_THREADS_POSIX) 2913498266Sopenharmony_ci# define CURL_STDCALL 3013498266Sopenharmony_ci# define curl_mutex_t pthread_mutex_t 3113498266Sopenharmony_ci# define curl_thread_t pthread_t * 3213498266Sopenharmony_ci# define curl_thread_t_null (pthread_t *)0 3313498266Sopenharmony_ci# define Curl_mutex_init(m) pthread_mutex_init(m, NULL) 3413498266Sopenharmony_ci# define Curl_mutex_acquire(m) pthread_mutex_lock(m) 3513498266Sopenharmony_ci# define Curl_mutex_release(m) pthread_mutex_unlock(m) 3613498266Sopenharmony_ci# define Curl_mutex_destroy(m) pthread_mutex_destroy(m) 3713498266Sopenharmony_ci#elif defined(USE_THREADS_WIN32) 3813498266Sopenharmony_ci# define CURL_STDCALL __stdcall 3913498266Sopenharmony_ci# define curl_mutex_t CRITICAL_SECTION 4013498266Sopenharmony_ci# define curl_thread_t HANDLE 4113498266Sopenharmony_ci# define curl_thread_t_null (HANDLE)0 4213498266Sopenharmony_ci# if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \ 4313498266Sopenharmony_ci (_WIN32_WINNT < _WIN32_WINNT_VISTA) 4413498266Sopenharmony_ci# define Curl_mutex_init(m) InitializeCriticalSection(m) 4513498266Sopenharmony_ci# else 4613498266Sopenharmony_ci# define Curl_mutex_init(m) InitializeCriticalSectionEx(m, 0, 1) 4713498266Sopenharmony_ci# endif 4813498266Sopenharmony_ci# define Curl_mutex_acquire(m) EnterCriticalSection(m) 4913498266Sopenharmony_ci# define Curl_mutex_release(m) LeaveCriticalSection(m) 5013498266Sopenharmony_ci# define Curl_mutex_destroy(m) DeleteCriticalSection(m) 5113498266Sopenharmony_ci#endif 5213498266Sopenharmony_ci 5313498266Sopenharmony_ci#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) 5413498266Sopenharmony_ci 5513498266Sopenharmony_ci/* !checksrc! disable SPACEBEFOREPAREN 1 */ 5613498266Sopenharmony_cicurl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *), 5713498266Sopenharmony_ci void *arg); 5813498266Sopenharmony_ci 5913498266Sopenharmony_civoid Curl_thread_destroy(curl_thread_t hnd); 6013498266Sopenharmony_ci 6113498266Sopenharmony_ciint Curl_thread_join(curl_thread_t *hnd); 6213498266Sopenharmony_ci 6313498266Sopenharmony_ci#endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */ 6413498266Sopenharmony_ci 6513498266Sopenharmony_ci#endif /* HEADER_CURL_THREADS_H */ 66