1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_THREADS_H 2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_THREADS_H 3*6236dae4SAndroid Build Coastguard Worker /*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker * 10*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker * 12*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker * 23*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker * 25*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 26*6236dae4SAndroid Build Coastguard Worker #include "curl_setup.h" 27*6236dae4SAndroid Build Coastguard Worker 28*6236dae4SAndroid Build Coastguard Worker #if defined(USE_THREADS_POSIX) 29*6236dae4SAndroid Build Coastguard Worker # define CURL_STDCALL 30*6236dae4SAndroid Build Coastguard Worker # define curl_mutex_t pthread_mutex_t 31*6236dae4SAndroid Build Coastguard Worker # define curl_thread_t pthread_t * 32*6236dae4SAndroid Build Coastguard Worker # define curl_thread_t_null (pthread_t *)0 33*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_init(m) pthread_mutex_init(m, NULL) 34*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_acquire(m) pthread_mutex_lock(m) 35*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_release(m) pthread_mutex_unlock(m) 36*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_destroy(m) pthread_mutex_destroy(m) 37*6236dae4SAndroid Build Coastguard Worker #elif defined(USE_THREADS_WIN32) 38*6236dae4SAndroid Build Coastguard Worker # define CURL_STDCALL __stdcall 39*6236dae4SAndroid Build Coastguard Worker # define curl_mutex_t CRITICAL_SECTION 40*6236dae4SAndroid Build Coastguard Worker # define curl_thread_t HANDLE 41*6236dae4SAndroid Build Coastguard Worker # define curl_thread_t_null (HANDLE)0 42*6236dae4SAndroid Build Coastguard Worker # if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \ 43*6236dae4SAndroid Build Coastguard Worker (_WIN32_WINNT < _WIN32_WINNT_VISTA) 44*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_init(m) InitializeCriticalSection(m) 45*6236dae4SAndroid Build Coastguard Worker # else 46*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_init(m) InitializeCriticalSectionEx(m, 0, 1) 47*6236dae4SAndroid Build Coastguard Worker # endif 48*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_acquire(m) EnterCriticalSection(m) 49*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_release(m) LeaveCriticalSection(m) 50*6236dae4SAndroid Build Coastguard Worker # define Curl_mutex_destroy(m) DeleteCriticalSection(m) 51*6236dae4SAndroid Build Coastguard Worker #endif 52*6236dae4SAndroid Build Coastguard Worker 53*6236dae4SAndroid Build Coastguard Worker #if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker curl_thread_t Curl_thread_create( 56*6236dae4SAndroid Build Coastguard Worker #if defined(_WIN32_WCE) || defined(CURL_WINDOWS_UWP) 57*6236dae4SAndroid Build Coastguard Worker DWORD 58*6236dae4SAndroid Build Coastguard Worker #else 59*6236dae4SAndroid Build Coastguard Worker unsigned int 60*6236dae4SAndroid Build Coastguard Worker #endif 61*6236dae4SAndroid Build Coastguard Worker (CURL_STDCALL *func) (void *), 62*6236dae4SAndroid Build Coastguard Worker void *arg); 63*6236dae4SAndroid Build Coastguard Worker 64*6236dae4SAndroid Build Coastguard Worker void Curl_thread_destroy(curl_thread_t hnd); 65*6236dae4SAndroid Build Coastguard Worker 66*6236dae4SAndroid Build Coastguard Worker int Curl_thread_join(curl_thread_t *hnd); 67*6236dae4SAndroid Build Coastguard Worker 68*6236dae4SAndroid Build Coastguard Worker #endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */ 69*6236dae4SAndroid Build Coastguard Worker 70*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_THREADS_H */ 71