Coverage Report

Created: 2026-08-13 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/curl/lib/curl_threads.h
Line
Count
Source
1
#ifndef HEADER_CURL_THREADS_H
2
#define HEADER_CURL_THREADS_H
3
/***************************************************************************
4
 *                                  _   _ ____  _
5
 *  Project                     ___| | | |  _ \| |
6
 *                             / __| | | | |_) | |
7
 *                            | (__| |_| |  _ <| |___
8
 *                             \___|\___/|_| \_\_____|
9
 *
10
 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
11
 *
12
 * This software is licensed as described in the file COPYING, which
13
 * you should have received as part of this distribution. The terms
14
 * are also available at https://curl.se/docs/copyright.html.
15
 *
16
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17
 * copies of the Software, and permit persons to whom the Software is
18
 * furnished to do so, under the terms of the COPYING file.
19
 *
20
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21
 * KIND, either express or implied.
22
 *
23
 * SPDX-License-Identifier: curl
24
 *
25
 ***************************************************************************/
26
#include "curl_setup.h"
27
28
#ifdef USE_MUTEX
29
#ifdef HAVE_THREADS_POSIX
30
#  define CURL_THREAD_RETURN_T   unsigned int
31
#  define CURL_STDCALL
32
#  define curl_mutex_t           pthread_mutex_t
33
0
#  define curl_thread_t          pthread_t *
34
#  define curl_thread_id_t       pthread_t
35
0
#  define curl_thread_t_null     (pthread_t *)0
36
0
#  define Curl_mutex_init(m)     pthread_mutex_init(m, NULL)
37
0
#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
38
0
#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
39
0
#  define Curl_mutex_destroy(m)  pthread_mutex_destroy(m)
40
#  define curl_cond_t            pthread_cond_t
41
0
#  define Curl_cond_init(c)      pthread_cond_init(c, NULL)
42
0
#  define Curl_cond_destroy(c)   pthread_cond_destroy(c)
43
#elif defined(_WIN32)
44
#  define CURL_THREAD_RETURN_T   DWORD
45
#  define CURL_STDCALL           WINAPI
46
#  define curl_mutex_t           CRITICAL_SECTION
47
#  define curl_thread_t          HANDLE
48
#  define curl_thread_id_t       DWORD
49
#  define curl_thread_t_null     (HANDLE)0
50
#  define Curl_mutex_init(m)     InitializeCriticalSectionEx(m, 0, 1)
51
#  define Curl_mutex_acquire(m)  EnterCriticalSection(m)
52
#  define Curl_mutex_release(m)  LeaveCriticalSection(m)
53
#  define Curl_mutex_destroy(m)  DeleteCriticalSection(m)
54
#  define curl_cond_t            CONDITION_VARIABLE
55
#  define Curl_cond_init(c)      InitializeConditionVariable(c)
56
#  define Curl_cond_destroy(c)   (void)(c)
57
#else
58
#error neither HAVE_THREADS_POSIX nor _WIN32 defined
59
#endif
60
61
void Curl_cond_signal(curl_cond_t *c);
62
void Curl_cond_wait(curl_cond_t *c, curl_mutex_t *m);
63
/* Returns CURLE_OPERATION_TIMEDOUT on timeout */
64
CURLcode Curl_cond_timedwait(curl_cond_t *c, curl_mutex_t *m,
65
                             uint32_t timeout_ms);
66
67
curl_thread_id_t Curl_thread_get_current_id(void);
68
bool Curl_thread_is_current(curl_thread_id_t tid);
69
70
#endif /* USE_MUTEX */
71
72
#ifdef USE_THREADS
73
74
curl_thread_t Curl_thread_create(
75
  CURL_THREAD_RETURN_T(CURL_STDCALL *func)(void *), void *arg);
76
77
void Curl_thread_destroy(curl_thread_t *hnd);
78
79
int Curl_thread_join(curl_thread_t *hnd);
80
81
#endif /* USE_THREADS */
82
83
#endif /* HEADER_CURL_THREADS_H */