1 | /*
|
---|
2 | Copyright (c) 2011-2016 mingw-w64 project
|
---|
3 |
|
---|
4 | Permission is hereby granted, free of charge, to any person obtaining a
|
---|
5 | copy of this software and associated documentation files (the "Software"),
|
---|
6 | to deal in the Software without restriction, including without limitation
|
---|
7 | the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
---|
8 | and/or sell copies of the Software, and to permit persons to whom the
|
---|
9 | Software is furnished to do so, subject to the following conditions:
|
---|
10 |
|
---|
11 | The above copyright notice and this permission notice shall be included in
|
---|
12 | all copies or substantial portions of the Software.
|
---|
13 |
|
---|
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
---|
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
---|
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
---|
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
---|
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
---|
19 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
---|
20 | DEALINGS IN THE SOFTWARE.
|
---|
21 | */
|
---|
22 |
|
---|
23 | /*
|
---|
24 | * Parts of this library are derived by:
|
---|
25 | *
|
---|
26 | * Posix Threads library for Microsoft Windows
|
---|
27 | *
|
---|
28 | * Use at own risk, there is no implied warranty to this code.
|
---|
29 | * It uses undocumented features of Microsoft Windows that can change
|
---|
30 | * at any time in the future.
|
---|
31 | *
|
---|
32 | * (C) 2010 Lockless Inc.
|
---|
33 | * All rights reserved.
|
---|
34 | *
|
---|
35 | * Redistribution and use in source and binary forms, with or without modification,
|
---|
36 | * are permitted provided that the following conditions are met:
|
---|
37 | *
|
---|
38 | *
|
---|
39 | * * Redistributions of source code must retain the above copyright notice,
|
---|
40 | * this list of conditions and the following disclaimer.
|
---|
41 | * * Redistributions in binary form must reproduce the above copyright notice,
|
---|
42 | * this list of conditions and the following disclaimer in the documentation
|
---|
43 | * and/or other materials provided with the distribution.
|
---|
44 | * * Neither the name of Lockless Inc. nor the names of its contributors may be
|
---|
45 | * used to endorse or promote products derived from this software without
|
---|
46 | * specific prior written permission.
|
---|
47 | *
|
---|
48 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN
|
---|
49 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
---|
50 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
---|
51 | * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
---|
52 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
---|
53 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
---|
54 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
---|
55 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
---|
56 | * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
---|
57 | * OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
58 | */
|
---|
59 | #ifndef WIN_PTHREADS_H
|
---|
60 | #define WIN_PTHREADS_H
|
---|
61 |
|
---|
62 | #include <stddef.h>
|
---|
63 | #include <errno.h>
|
---|
64 | #include <sys/types.h>
|
---|
65 |
|
---|
66 | #include <process.h>
|
---|
67 | #include <limits.h>
|
---|
68 | #include <signal.h>
|
---|
69 | #include <time.h>
|
---|
70 |
|
---|
71 | #include <sys/timeb.h>
|
---|
72 |
|
---|
73 | #include "pthread_compat.h"
|
---|
74 |
|
---|
75 | #ifdef __cplusplus
|
---|
76 | extern "C" {
|
---|
77 | #endif
|
---|
78 |
|
---|
79 | #define __WINPTHREADS_VERSION_MAJOR 0
|
---|
80 | #define __WINPTHREADS_VERSION_MINOR 5
|
---|
81 | #define __WINPTHREADS_VERSION_PATCHLEVEL 0
|
---|
82 |
|
---|
83 | /* MSB 8-bit major version, 8-bit minor version, 16-bit patch level. */
|
---|
84 | #define __WINPTHREADS_VERSION 0x00050000
|
---|
85 |
|
---|
86 | #if defined DLL_EXPORT
|
---|
87 | #ifdef IN_WINPTHREAD
|
---|
88 | #define WINPTHREAD_API __declspec(dllexport)
|
---|
89 | #else
|
---|
90 | #define WINPTHREAD_API __declspec(dllimport)
|
---|
91 | #endif
|
---|
92 | #else
|
---|
93 | #define WINPTHREAD_API
|
---|
94 | #endif
|
---|
95 |
|
---|
96 | /* #define WINPTHREAD_DBG 1 */
|
---|
97 |
|
---|
98 | /* Compatibility stuff: */
|
---|
99 | #define RWLS_PER_THREAD 8
|
---|
100 |
|
---|
101 | /* Error-codes. */
|
---|
102 | #ifndef ETIMEDOUT
|
---|
103 | #define ETIMEDOUT 138
|
---|
104 | #endif
|
---|
105 | #ifndef ENOTSUP
|
---|
106 | #define ENOTSUP 129
|
---|
107 | #endif
|
---|
108 | #ifndef EWOULDBLOCK
|
---|
109 | #define EWOULDBLOCK 140
|
---|
110 | #endif
|
---|
111 |
|
---|
112 | /* pthread specific defines. */
|
---|
113 |
|
---|
114 | #define PTHREAD_CANCEL_DISABLE 0
|
---|
115 | #define PTHREAD_CANCEL_ENABLE 0x01
|
---|
116 |
|
---|
117 | #define PTHREAD_CANCEL_DEFERRED 0
|
---|
118 | #define PTHREAD_CANCEL_ASYNCHRONOUS 0x02
|
---|
119 |
|
---|
120 | #define PTHREAD_CREATE_JOINABLE 0
|
---|
121 | #define PTHREAD_CREATE_DETACHED 0x04
|
---|
122 |
|
---|
123 | #define PTHREAD_EXPLICIT_SCHED 0
|
---|
124 | #define PTHREAD_INHERIT_SCHED 0x08
|
---|
125 |
|
---|
126 | #define PTHREAD_SCOPE_PROCESS 0
|
---|
127 | #define PTHREAD_SCOPE_SYSTEM 0x10
|
---|
128 |
|
---|
129 | #define PTHREAD_DEFAULT_ATTR (PTHREAD_CANCEL_ENABLE)
|
---|
130 |
|
---|
131 | #define PTHREAD_CANCELED ((void *) (intptr_t) 0xDEADBEEF)
|
---|
132 |
|
---|
133 | #define _PTHREAD_NULL_THREAD ((pthread_t) 0)
|
---|
134 |
|
---|
135 | #define PTHREAD_ONCE_INIT 0
|
---|
136 |
|
---|
137 | #define PTHREAD_DESTRUCTOR_ITERATIONS 256
|
---|
138 | #define PTHREAD_KEYS_MAX (1<<20)
|
---|
139 |
|
---|
140 | #define PTHREAD_MUTEX_NORMAL 0
|
---|
141 | #define PTHREAD_MUTEX_ERRORCHECK 1
|
---|
142 | #define PTHREAD_MUTEX_RECURSIVE 2
|
---|
143 | #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
|
---|
144 |
|
---|
145 | #define PTHREAD_MUTEX_SHARED 1
|
---|
146 | #define PTHREAD_MUTEX_PRIVATE 0
|
---|
147 |
|
---|
148 | #define PTHREAD_PRIO_NONE 0
|
---|
149 | #define PTHREAD_PRIO_INHERIT 8
|
---|
150 | #define PTHREAD_PRIO_PROTECT 16
|
---|
151 | #define PTHREAD_PRIO_MULT 32
|
---|
152 | #define PTHREAD_PROCESS_SHARED 1
|
---|
153 | #define PTHREAD_PROCESS_PRIVATE 0
|
---|
154 |
|
---|
155 | #define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
|
---|
156 | #define PTHREAD_MUTEX_TIMED_NP PTHREAD_MUTEX_FAST_NP
|
---|
157 | #define PTHREAD_MUTEX_ADAPTIVE_NP PTHREAD_MUTEX_FAST_NP
|
---|
158 | #define PTHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
|
---|
159 | #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
---|
160 |
|
---|
161 | void * WINPTHREAD_API pthread_timechange_handler_np(void * dummy);
|
---|
162 | int WINPTHREAD_API pthread_delay_np (const struct timespec *interval);
|
---|
163 | int WINPTHREAD_API pthread_num_processors_np(void);
|
---|
164 | int WINPTHREAD_API pthread_set_num_processors_np(int n);
|
---|
165 |
|
---|
166 | #define PTHREAD_BARRIER_SERIAL_THREAD 1
|
---|
167 |
|
---|
168 | /* maximum number of times a read lock may be obtained */
|
---|
169 | #define MAX_READ_LOCKS (INT_MAX - 1)
|
---|
170 |
|
---|
171 | /* No fork() in windows - so ignore this */
|
---|
172 | #define pthread_atfork(F1,F2,F3) 0
|
---|
173 |
|
---|
174 | /* unsupported stuff: */
|
---|
175 | #define pthread_mutex_getprioceiling(M, P) ENOTSUP
|
---|
176 | #define pthread_mutex_setprioceiling(M, P) ENOTSUP
|
---|
177 | #define pthread_getcpuclockid(T, C) ENOTSUP
|
---|
178 | #define pthread_attr_getguardsize(A, S) ENOTSUP
|
---|
179 | #define pthread_attr_setgaurdsize(A, S) ENOTSUP
|
---|
180 |
|
---|
181 | typedef long pthread_once_t;
|
---|
182 | typedef unsigned pthread_mutexattr_t;
|
---|
183 | typedef unsigned pthread_key_t;
|
---|
184 | typedef void *pthread_barrierattr_t;
|
---|
185 | typedef int pthread_condattr_t;
|
---|
186 | typedef int pthread_rwlockattr_t;
|
---|
187 |
|
---|
188 | /*
|
---|
189 | struct _pthread_v;
|
---|
190 |
|
---|
191 | typedef struct pthread_t {
|
---|
192 | struct _pthread_v *p;
|
---|
193 | int x;
|
---|
194 | } pthread_t;
|
---|
195 | */
|
---|
196 |
|
---|
197 | typedef uintptr_t pthread_t;
|
---|
198 |
|
---|
199 | typedef struct _pthread_cleanup _pthread_cleanup;
|
---|
200 | struct _pthread_cleanup
|
---|
201 | {
|
---|
202 | void (*func)(void *);
|
---|
203 | void *arg;
|
---|
204 | _pthread_cleanup *next;
|
---|
205 | };
|
---|
206 |
|
---|
207 | #define pthread_cleanup_push(F, A)\
|
---|
208 | {\
|
---|
209 | const _pthread_cleanup _pthread_cup = {(F), (A), *pthread_getclean()};\
|
---|
210 | __sync_synchronize();\
|
---|
211 | *pthread_getclean() = (_pthread_cleanup *) &_pthread_cup;\
|
---|
212 | __sync_synchronize()
|
---|
213 |
|
---|
214 | /* Note that if async cancelling is used, then there is a race here */
|
---|
215 | #define pthread_cleanup_pop(E)\
|
---|
216 | (*pthread_getclean() = _pthread_cup.next, ((E) ? (_pthread_cup.func((pthread_once_t *)_pthread_cup.arg)) : (void)0));}
|
---|
217 |
|
---|
218 | #ifndef SCHED_OTHER
|
---|
219 | /* Some POSIX realtime extensions, mostly stubbed */
|
---|
220 | #define SCHED_OTHER 0
|
---|
221 | #define SCHED_FIFO 1
|
---|
222 | #define SCHED_RR 2
|
---|
223 | #define SCHED_MIN SCHED_OTHER
|
---|
224 | #define SCHED_MAX SCHED_RR
|
---|
225 |
|
---|
226 | struct sched_param {
|
---|
227 | int sched_priority;
|
---|
228 | };
|
---|
229 |
|
---|
230 | int WINPTHREAD_API sched_yield(void);
|
---|
231 | int WINPTHREAD_API sched_get_priority_min(int pol);
|
---|
232 | int WINPTHREAD_API sched_get_priority_max(int pol);
|
---|
233 | int WINPTHREAD_API sched_getscheduler(pid_t pid);
|
---|
234 | int WINPTHREAD_API sched_setscheduler(pid_t pid, int pol, const struct sched_param *param);
|
---|
235 |
|
---|
236 | #endif
|
---|
237 |
|
---|
238 | typedef struct pthread_attr_t pthread_attr_t;
|
---|
239 | struct pthread_attr_t
|
---|
240 | {
|
---|
241 | unsigned p_state;
|
---|
242 | void *stack;
|
---|
243 | size_t s_size;
|
---|
244 | struct sched_param param;
|
---|
245 | };
|
---|
246 |
|
---|
247 | int WINPTHREAD_API pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
|
---|
248 | int WINPTHREAD_API pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
|
---|
249 | int WINPTHREAD_API pthread_getschedparam(pthread_t thread, int *pol, struct sched_param *param);
|
---|
250 | int WINPTHREAD_API pthread_setschedparam(pthread_t thread, int pol, const struct sched_param *param);
|
---|
251 | int WINPTHREAD_API pthread_attr_setschedpolicy (pthread_attr_t *attr, int pol);
|
---|
252 | int WINPTHREAD_API pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *pol);
|
---|
253 |
|
---|
254 | /* synchronization objects */
|
---|
255 | typedef intptr_t pthread_spinlock_t;
|
---|
256 | typedef intptr_t pthread_mutex_t;
|
---|
257 | typedef intptr_t pthread_cond_t;
|
---|
258 | typedef intptr_t pthread_rwlock_t;
|
---|
259 | typedef void *pthread_barrier_t;
|
---|
260 |
|
---|
261 | #define PTHREAD_MUTEX_NORMAL 0
|
---|
262 | #define PTHREAD_MUTEX_ERRORCHECK 1
|
---|
263 | #define PTHREAD_MUTEX_RECURSIVE 2
|
---|
264 |
|
---|
265 | #define GENERIC_INITIALIZER -1
|
---|
266 | #define GENERIC_ERRORCHECK_INITIALIZER -2
|
---|
267 | #define GENERIC_RECURSIVE_INITIALIZER -3
|
---|
268 | #define GENERIC_NORMAL_INITIALIZER -1
|
---|
269 | #define PTHREAD_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_INITIALIZER
|
---|
270 | #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_RECURSIVE_INITIALIZER
|
---|
271 | #define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_ERRORCHECK_INITIALIZER
|
---|
272 | #define PTHREAD_NORMAL_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_NORMAL_INITIALIZER
|
---|
273 | #define PTHREAD_DEFAULT_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER
|
---|
274 | #define PTHREAD_COND_INITIALIZER (pthread_cond_t)GENERIC_INITIALIZER
|
---|
275 | #define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)GENERIC_INITIALIZER
|
---|
276 | #define PTHREAD_SPINLOCK_INITIALIZER (pthread_spinlock_t)GENERIC_INITIALIZER
|
---|
277 |
|
---|
278 | extern void WINPTHREAD_API (**_pthread_key_dest)(void *);
|
---|
279 | int WINPTHREAD_API pthread_key_create(pthread_key_t *key, void (* dest)(void *));
|
---|
280 | int WINPTHREAD_API pthread_key_delete(pthread_key_t key);
|
---|
281 | void * WINPTHREAD_API pthread_getspecific(pthread_key_t key);
|
---|
282 | int WINPTHREAD_API pthread_setspecific(pthread_key_t key, const void *value);
|
---|
283 |
|
---|
284 | pthread_t WINPTHREAD_API pthread_self(void);
|
---|
285 | int WINPTHREAD_API pthread_once(pthread_once_t *o, void (*func)(void));
|
---|
286 | void WINPTHREAD_API pthread_testcancel(void);
|
---|
287 | int WINPTHREAD_API pthread_equal(pthread_t t1, pthread_t t2);
|
---|
288 | void WINPTHREAD_API pthread_tls_init(void);
|
---|
289 | void WINPTHREAD_API _pthread_cleanup_dest(pthread_t t);
|
---|
290 | int WINPTHREAD_API pthread_get_concurrency(int *val);
|
---|
291 | int WINPTHREAD_API pthread_set_concurrency(int val);
|
---|
292 | void WINPTHREAD_API pthread_exit(void *res);
|
---|
293 | void WINPTHREAD_API _pthread_invoke_cancel(void);
|
---|
294 | int WINPTHREAD_API pthread_cancel(pthread_t t);
|
---|
295 | int WINPTHREAD_API pthread_kill(pthread_t t, int sig);
|
---|
296 | unsigned WINPTHREAD_API _pthread_get_state(const pthread_attr_t *attr, unsigned flag);
|
---|
297 | int WINPTHREAD_API _pthread_set_state(pthread_attr_t *attr, unsigned flag, unsigned val);
|
---|
298 | int WINPTHREAD_API pthread_setcancelstate(int state, int *oldstate);
|
---|
299 | int WINPTHREAD_API pthread_setcanceltype(int type, int *oldtype);
|
---|
300 | int WINPTHREAD_API pthread_create_wrapper(void *args);
|
---|
301 | int WINPTHREAD_API pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(* func)(void *), void *arg);
|
---|
302 | int WINPTHREAD_API pthread_join(pthread_t t, void **res);
|
---|
303 | int WINPTHREAD_API pthread_detach(pthread_t t);
|
---|
304 | int WINPTHREAD_API pthread_setname_np(pthread_t thread, const char *name);
|
---|
305 | int WINPTHREAD_API pthread_getname_np(pthread_t thread, char *name, size_t len);
|
---|
306 |
|
---|
307 |
|
---|
308 | int WINPTHREAD_API pthread_rwlock_init(pthread_rwlock_t *rwlock_, const pthread_rwlockattr_t *attr);
|
---|
309 | int WINPTHREAD_API pthread_rwlock_wrlock(pthread_rwlock_t *l);
|
---|
310 | int WINPTHREAD_API pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *ts);
|
---|
311 | int WINPTHREAD_API pthread_rwlock_rdlock(pthread_rwlock_t *l);
|
---|
312 | int WINPTHREAD_API pthread_rwlock_timedrdlock(pthread_rwlock_t *l, const struct timespec *ts);
|
---|
313 | int WINPTHREAD_API pthread_rwlock_unlock(pthread_rwlock_t *l);
|
---|
314 | int WINPTHREAD_API pthread_rwlock_tryrdlock(pthread_rwlock_t *l);
|
---|
315 | int WINPTHREAD_API pthread_rwlock_trywrlock(pthread_rwlock_t *l);
|
---|
316 | int WINPTHREAD_API pthread_rwlock_destroy (pthread_rwlock_t *l);
|
---|
317 |
|
---|
318 | int WINPTHREAD_API pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *a);
|
---|
319 | int WINPTHREAD_API pthread_cond_destroy(pthread_cond_t *cv);
|
---|
320 | int WINPTHREAD_API pthread_cond_signal (pthread_cond_t *cv);
|
---|
321 | int WINPTHREAD_API pthread_cond_broadcast (pthread_cond_t *cv);
|
---|
322 | int WINPTHREAD_API pthread_cond_wait (pthread_cond_t *cv, pthread_mutex_t *external_mutex);
|
---|
323 | int WINPTHREAD_API pthread_cond_timedwait(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t);
|
---|
324 | int WINPTHREAD_API pthread_cond_timedwait_relative_np(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t);
|
---|
325 |
|
---|
326 | int WINPTHREAD_API pthread_mutex_lock(pthread_mutex_t *m);
|
---|
327 | int WINPTHREAD_API pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *ts);
|
---|
328 | int WINPTHREAD_API pthread_mutex_unlock(pthread_mutex_t *m);
|
---|
329 | int WINPTHREAD_API pthread_mutex_trylock(pthread_mutex_t *m);
|
---|
330 | int WINPTHREAD_API pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *a);
|
---|
331 | int WINPTHREAD_API pthread_mutex_destroy(pthread_mutex_t *m);
|
---|
332 |
|
---|
333 | int WINPTHREAD_API pthread_barrier_destroy(pthread_barrier_t *b);
|
---|
334 | int WINPTHREAD_API pthread_barrier_init(pthread_barrier_t *b, const void *attr, unsigned int count);
|
---|
335 | int WINPTHREAD_API pthread_barrier_wait(pthread_barrier_t *b);
|
---|
336 |
|
---|
337 | int WINPTHREAD_API pthread_spin_init(pthread_spinlock_t *l, int pshared);
|
---|
338 | int WINPTHREAD_API pthread_spin_destroy(pthread_spinlock_t *l);
|
---|
339 | /* No-fair spinlock due to lack of knowledge of thread number. */
|
---|
340 | int WINPTHREAD_API pthread_spin_lock(pthread_spinlock_t *l);
|
---|
341 | int WINPTHREAD_API pthread_spin_trylock(pthread_spinlock_t *l);
|
---|
342 | int WINPTHREAD_API pthread_spin_unlock(pthread_spinlock_t *l);
|
---|
343 |
|
---|
344 | int WINPTHREAD_API pthread_attr_init(pthread_attr_t *attr);
|
---|
345 | int WINPTHREAD_API pthread_attr_destroy(pthread_attr_t *attr);
|
---|
346 | int WINPTHREAD_API pthread_attr_setdetachstate(pthread_attr_t *a, int flag);
|
---|
347 | int WINPTHREAD_API pthread_attr_getdetachstate(const pthread_attr_t *a, int *flag);
|
---|
348 | int WINPTHREAD_API pthread_attr_setinheritsched(pthread_attr_t *a, int flag);
|
---|
349 | int WINPTHREAD_API pthread_attr_getinheritsched(const pthread_attr_t *a, int *flag);
|
---|
350 | int WINPTHREAD_API pthread_attr_setscope(pthread_attr_t *a, int flag);
|
---|
351 | int WINPTHREAD_API pthread_attr_getscope(const pthread_attr_t *a, int *flag);
|
---|
352 | int WINPTHREAD_API pthread_attr_getstack(const pthread_attr_t *attr, void **stack, size_t *size);
|
---|
353 | int WINPTHREAD_API pthread_attr_setstack(pthread_attr_t *attr, void *stack, size_t size);
|
---|
354 | int WINPTHREAD_API pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stack);
|
---|
355 | int WINPTHREAD_API pthread_attr_setstackaddr(pthread_attr_t *attr, void *stack);
|
---|
356 | int WINPTHREAD_API pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *size);
|
---|
357 | int WINPTHREAD_API pthread_attr_setstacksize(pthread_attr_t *attr, size_t size);
|
---|
358 |
|
---|
359 | int WINPTHREAD_API pthread_mutexattr_init(pthread_mutexattr_t *a);
|
---|
360 | int WINPTHREAD_API pthread_mutexattr_destroy(pthread_mutexattr_t *a);
|
---|
361 | int WINPTHREAD_API pthread_mutexattr_gettype(const pthread_mutexattr_t *a, int *type);
|
---|
362 | int WINPTHREAD_API pthread_mutexattr_settype(pthread_mutexattr_t *a, int type);
|
---|
363 | int WINPTHREAD_API pthread_mutexattr_getpshared(const pthread_mutexattr_t *a, int *type);
|
---|
364 | int WINPTHREAD_API pthread_mutexattr_setpshared(pthread_mutexattr_t * a, int type);
|
---|
365 | int WINPTHREAD_API pthread_mutexattr_getprotocol(const pthread_mutexattr_t *a, int *type);
|
---|
366 | int WINPTHREAD_API pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int type);
|
---|
367 | int WINPTHREAD_API pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *a, int * prio);
|
---|
368 | int WINPTHREAD_API pthread_mutexattr_setprioceiling(pthread_mutexattr_t *a, int prio);
|
---|
369 | int WINPTHREAD_API pthread_getconcurrency(void);
|
---|
370 | int WINPTHREAD_API pthread_setconcurrency(int new_level);
|
---|
371 |
|
---|
372 | int WINPTHREAD_API pthread_condattr_destroy(pthread_condattr_t *a);
|
---|
373 | int WINPTHREAD_API pthread_condattr_init(pthread_condattr_t *a);
|
---|
374 | int WINPTHREAD_API pthread_condattr_getpshared(const pthread_condattr_t *a, int *s);
|
---|
375 | int WINPTHREAD_API pthread_condattr_setpshared(pthread_condattr_t *a, int s);
|
---|
376 |
|
---|
377 | #ifndef __clockid_t_defined
|
---|
378 | typedef int clockid_t;
|
---|
379 | #define __clockid_t_defined 1
|
---|
380 | #endif /* __clockid_t_defined */
|
---|
381 |
|
---|
382 | int WINPTHREAD_API pthread_condattr_getclock (const pthread_condattr_t *attr,
|
---|
383 | clockid_t *clock_id);
|
---|
384 | int WINPTHREAD_API pthread_condattr_setclock(pthread_condattr_t *attr,
|
---|
385 | clockid_t clock_id);
|
---|
386 | int WINPTHREAD_API __pthread_clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);
|
---|
387 |
|
---|
388 | int WINPTHREAD_API pthread_barrierattr_init(void **attr);
|
---|
389 | int WINPTHREAD_API pthread_barrierattr_destroy(void **attr);
|
---|
390 | int WINPTHREAD_API pthread_barrierattr_setpshared(void **attr, int s);
|
---|
391 | int WINPTHREAD_API pthread_barrierattr_getpshared(void **attr, int *s);
|
---|
392 |
|
---|
393 | /* Private extensions for analysis and internal use. */
|
---|
394 | struct _pthread_cleanup ** WINPTHREAD_API pthread_getclean (void);
|
---|
395 | void * WINPTHREAD_API pthread_gethandle (pthread_t t);
|
---|
396 | void * WINPTHREAD_API pthread_getevent ();
|
---|
397 |
|
---|
398 | unsigned long long WINPTHREAD_API _pthread_rel_time_in_ms(const struct timespec *ts);
|
---|
399 | unsigned long long WINPTHREAD_API _pthread_time_in_ms(void);
|
---|
400 | unsigned long long WINPTHREAD_API _pthread_time_in_ms_from_timespec(const struct timespec *ts);
|
---|
401 | int WINPTHREAD_API _pthread_tryjoin (pthread_t t, void **res);
|
---|
402 | int WINPTHREAD_API pthread_rwlockattr_destroy(pthread_rwlockattr_t *a);
|
---|
403 | int WINPTHREAD_API pthread_rwlockattr_getpshared(pthread_rwlockattr_t *a, int *s);
|
---|
404 | int WINPTHREAD_API pthread_rwlockattr_init(pthread_rwlockattr_t *a);
|
---|
405 | int WINPTHREAD_API pthread_rwlockattr_setpshared(pthread_rwlockattr_t *a, int s);
|
---|
406 |
|
---|
407 | #ifndef SIG_BLOCK
|
---|
408 | #define SIG_BLOCK 0
|
---|
409 | #endif
|
---|
410 | #ifndef SIG_UNBLOCK
|
---|
411 | #define SIG_UNBLOCK 1
|
---|
412 | #endif
|
---|
413 | #ifndef SIG_SETMASK
|
---|
414 | #define SIG_SETMASK 2
|
---|
415 | #endif
|
---|
416 |
|
---|
417 | #include <pthread_unistd.h>
|
---|
418 |
|
---|
419 | #undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
|
---|
420 | #define _POSIX_THREAD_DESTRUCTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS
|
---|
421 |
|
---|
422 | #undef _POSIX_THREAD_KEYS_MAX
|
---|
423 | #define _POSIX_THREAD_KEYS_MAX PTHREAD_KEYS_MAX
|
---|
424 |
|
---|
425 | #undef PTHREAD_THREADS_MAX
|
---|
426 | #define PTHREAD_THREADS_MAX 2019
|
---|
427 |
|
---|
428 | #undef _POSIX_SEM_NSEMS_MAX
|
---|
429 | #define _POSIX_SEM_NSEMS_MAX 256
|
---|
430 |
|
---|
431 | #undef SEM_NSEMS_MAX
|
---|
432 | #define SEM_NSEMS_MAX 1024
|
---|
433 |
|
---|
434 | /* Wrap cancellation points. */
|
---|
435 | #ifdef __WINPTRHEAD_ENABLE_WRAP_API
|
---|
436 | #define accept(...) (pthread_testcancel(), accept(__VA_ARGS__))
|
---|
437 | #define aio_suspend(...) (pthread_testcancel(), aio_suspend(__VA_ARGS__))
|
---|
438 | #define clock_nanosleep(...) (pthread_testcancel(), clock_nanosleep(__VA_ARGS__))
|
---|
439 | #define close(...) (pthread_testcancel(), close(__VA_ARGS__))
|
---|
440 | #define connect(...) (pthread_testcancel(), connect(__VA_ARGS__))
|
---|
441 | #define creat(...) (pthread_testcancel(), creat(__VA_ARGS__))
|
---|
442 | #define fcntl(...) (pthread_testcancel(), fcntl(__VA_ARGS__))
|
---|
443 | #define fdatasync(...) (pthread_testcancel(), fdatasync(__VA_ARGS__))
|
---|
444 | #define fsync(...) (pthread_testcancel(), fsync(__VA_ARGS__))
|
---|
445 | #define getmsg(...) (pthread_testcancel(), getmsg(__VA_ARGS__))
|
---|
446 | #define getpmsg(...) (pthread_testcancel(), getpmsg(__VA_ARGS__))
|
---|
447 | #define lockf(...) (pthread_testcancel(), lockf(__VA_ARGS__))
|
---|
448 | #define mg_receive(...) (pthread_testcancel(), mg_receive(__VA_ARGS__))
|
---|
449 | #define mg_send(...) (pthread_testcancel(), mg_send(__VA_ARGS__))
|
---|
450 | #define mg_timedreceive(...) (pthread_testcancel(), mg_timedreceive(__VA_ARGS__))
|
---|
451 | #define mg_timessend(...) (pthread_testcancel(), mg_timedsend(__VA_ARGS__))
|
---|
452 | #define msgrcv(...) (pthread_testcancel(), msgrecv(__VA_ARGS__))
|
---|
453 | #define msgsnd(...) (pthread_testcancel(), msgsnd(__VA_ARGS__))
|
---|
454 | #define msync(...) (pthread_testcancel(), msync(__VA_ARGS__))
|
---|
455 | #define nanosleep(...) (pthread_testcancel(), nanosleep(__VA_ARGS__))
|
---|
456 | #define open(...) (pthread_testcancel(), open(__VA_ARGS__))
|
---|
457 | #define pause(...) (pthread_testcancel(), pause(__VA_ARGS__))
|
---|
458 | #define poll(...) (pthread_testcancel(), poll(__VA_ARGS__))
|
---|
459 | #define pread(...) (pthread_testcancel(), pread(__VA_ARGS__))
|
---|
460 | #define pselect(...) (pthread_testcancel(), pselect(__VA_ARGS__))
|
---|
461 | #define putmsg(...) (pthread_testcancel(), putmsg(__VA_ARGS__))
|
---|
462 | #define putpmsg(...) (pthread_testcancel(), putpmsg(__VA_ARGS__))
|
---|
463 | #define pwrite(...) (pthread_testcancel(), pwrite(__VA_ARGS__))
|
---|
464 | #define read(...) (pthread_testcancel(), read(__VA_ARGS__))
|
---|
465 | #define readv(...) (pthread_testcancel(), readv(__VA_ARGS__))
|
---|
466 | #define recv(...) (pthread_testcancel(), recv(__VA_ARGS__))
|
---|
467 | #define recvfrom(...) (pthread_testcancel(), recvfrom(__VA_ARGS__))
|
---|
468 | #define recvmsg(...) (pthread_testcancel(), recvmsg(__VA_ARGS__))
|
---|
469 | #define select(...) (pthread_testcancel(), select(__VA_ARGS__))
|
---|
470 | #define sem_timedwait(...) (pthread_testcancel(), sem_timedwait(__VA_ARGS__))
|
---|
471 | #define sem_wait(...) (pthread_testcancel(), sem_wait(__VA_ARGS__))
|
---|
472 | #define send(...) (pthread_testcancel(), send(__VA_ARGS__))
|
---|
473 | #define sendmsg(...) (pthread_testcancel(), sendmsg(__VA_ARGS__))
|
---|
474 | #define sendto(...) (pthread_testcancel(), sendto(__VA_ARGS__))
|
---|
475 | #define sigpause(...) (pthread_testcancel(), sigpause(__VA_ARGS__))
|
---|
476 | #define sigsuspend(...) (pthread_testcancel(), sigsuspend(__VA_ARGS__))
|
---|
477 | #define sigwait(...) (pthread_testcancel(), sigwait(__VA_ARGS__))
|
---|
478 | #define sigwaitinfo(...) (pthread_testcancel(), sigwaitinfo(__VA_ARGS__))
|
---|
479 | #define sleep(...) (pthread_testcancel(), sleep(__VA_ARGS__))
|
---|
480 | //#define Sleep(...) (pthread_testcancel(), Sleep(__VA_ARGS__))
|
---|
481 | #define system(...) (pthread_testcancel(), system(__VA_ARGS__))
|
---|
482 | #define access(...) (pthread_testcancel(), access(__VA_ARGS__))
|
---|
483 | #define asctime(...) (pthread_testcancel(), asctime(__VA_ARGS__))
|
---|
484 | #define catclose(...) (pthread_testcancel(), catclose(__VA_ARGS__))
|
---|
485 | #define catgets(...) (pthread_testcancel(), catgets(__VA_ARGS__))
|
---|
486 | #define catopen(...) (pthread_testcancel(), catopen(__VA_ARGS__))
|
---|
487 | #define closedir(...) (pthread_testcancel(), closedir(__VA_ARGS__))
|
---|
488 | #define closelog(...) (pthread_testcancel(), closelog(__VA_ARGS__))
|
---|
489 | #define ctermid(...) (pthread_testcancel(), ctermid(__VA_ARGS__))
|
---|
490 | #define ctime(...) (pthread_testcancel(), ctime(__VA_ARGS__))
|
---|
491 | #define dbm_close(...) (pthread_testcancel(), dbm_close(__VA_ARGS__))
|
---|
492 | #define dbm_delete(...) (pthread_testcancel(), dbm_delete(__VA_ARGS__))
|
---|
493 | #define dbm_fetch(...) (pthread_testcancel(), dbm_fetch(__VA_ARGS__))
|
---|
494 | #define dbm_nextkey(...) (pthread_testcancel(), dbm_nextkey(__VA_ARGS__))
|
---|
495 | #define dbm_open(...) (pthread_testcancel(), dbm_open(__VA_ARGS__))
|
---|
496 | #define dbm_store(...) (pthread_testcancel(), dbm_store(__VA_ARGS__))
|
---|
497 | #define dlclose(...) (pthread_testcancel(), dlclose(__VA_ARGS__))
|
---|
498 | #define dlopen(...) (pthread_testcancel(), dlopen(__VA_ARGS__))
|
---|
499 | #define endgrent(...) (pthread_testcancel(), endgrent(__VA_ARGS__))
|
---|
500 | #define endhostent(...) (pthread_testcancel(), endhostent(__VA_ARGS__))
|
---|
501 | #define endnetent(...) (pthread_testcancel(), endnetent(__VA_ARGS__))
|
---|
502 | #define endprotoent(...) (pthread_testcancel(), endprotoend(__VA_ARGS__))
|
---|
503 | #define endpwent(...) (pthread_testcancel(), endpwent(__VA_ARGS__))
|
---|
504 | #define endservent(...) (pthread_testcancel(), endservent(__VA_ARGS__))
|
---|
505 | #define endutxent(...) (pthread_testcancel(), endutxent(__VA_ARGS__))
|
---|
506 | #define fclose(...) (pthread_testcancel(), fclose(__VA_ARGS__))
|
---|
507 | #define fflush(...) (pthread_testcancel(), fflush(__VA_ARGS__))
|
---|
508 | #define fgetc(...) (pthread_testcancel(), fgetc(__VA_ARGS__))
|
---|
509 | #define fgetpos(...) (pthread_testcancel(), fgetpos(__VA_ARGS__))
|
---|
510 | #define fgets(...) (pthread_testcancel(), fgets(__VA_ARGS__))
|
---|
511 | #define fgetwc(...) (pthread_testcancel(), fgetwc(__VA_ARGS__))
|
---|
512 | #define fgetws(...) (pthread_testcancel(), fgetws(__VA_ARGS__))
|
---|
513 | #define fmtmsg(...) (pthread_testcancel(), fmtmsg(__VA_ARGS__))
|
---|
514 | #define fopen(...) (pthread_testcancel(), fopen(__VA_ARGS__))
|
---|
515 | #define fpathconf(...) (pthread_testcancel(), fpathconf(__VA_ARGS__))
|
---|
516 | #define fprintf(...) (pthread_testcancel(), fprintf(__VA_ARGS__))
|
---|
517 | #define fputc(...) (pthread_testcancel(), fputc(__VA_ARGS__))
|
---|
518 | #define fputs(...) (pthread_testcancel(), fputs(__VA_ARGS__))
|
---|
519 | #define fputwc(...) (pthread_testcancel(), fputwc(__VA_ARGS__))
|
---|
520 | #define fputws(...) (pthread_testcancel(), fputws(__VA_ARGS__))
|
---|
521 | #define fread(...) (pthread_testcancel(), fread(__VA_ARGS__))
|
---|
522 | #define freopen(...) (pthread_testcancel(), freopen(__VA_ARGS__))
|
---|
523 | #define fscanf(...) (pthread_testcancel(), fscanf(__VA_ARGS__))
|
---|
524 | #define fseek(...) (pthread_testcancel(), fseek(__VA_ARGS__))
|
---|
525 | #define fseeko(...) (pthread_testcancel(), fseeko(__VA_ARGS__))
|
---|
526 | #define fsetpos(...) (pthread_testcancel(), fsetpos(__VA_ARGS__))
|
---|
527 | #define fstat(...) (pthread_testcancel(), fstat(__VA_ARGS__))
|
---|
528 | #define ftell(...) (pthread_testcancel(), ftell(__VA_ARGS__))
|
---|
529 | #define ftello(...) (pthread_testcancel(), ftello(__VA_ARGS__))
|
---|
530 | #define ftw(...) (pthread_testcancel(), ftw(__VA_ARGS__))
|
---|
531 | #define fwprintf(...) (pthread_testcancel(), fwprintf(__VA_ARGS__))
|
---|
532 | #define fwrite(...) (pthread_testcancel(), fwrite(__VA_ARGS__))
|
---|
533 | #define fwscanf(...) (pthread_testcancel(), fwscanf(__VA_ARGS__))
|
---|
534 | #define getaddrinfo(...) (pthread_testcancel(), getaddrinfo(__VA_ARGS__))
|
---|
535 | #define getc(...) (pthread_testcancel(), getc(__VA_ARGS__))
|
---|
536 | #define getc_unlocked(...) (pthread_testcancel(), getc_unlocked(__VA_ARGS__))
|
---|
537 | #define getchar(...) (pthread_testcancel(), getchar(__VA_ARGS__))
|
---|
538 | #define getchar_unlocked(...) (pthread_testcancel(), getchar_unlocked(__VA_ARGS__))
|
---|
539 | #define getcwd(...) (pthread_testcancel(), getcwd(__VA_ARGS__))
|
---|
540 | #define getdate(...) (pthread_testcancel(), getdate(__VA_ARGS__))
|
---|
541 | #define getgrent(...) (pthread_testcancel(), getgrent(__VA_ARGS__))
|
---|
542 | #define getgrgid(...) (pthread_testcancel(), getgrgid(__VA_ARGS__))
|
---|
543 | #define getgrgid_r(...) (pthread_testcancel(), getgrgid_r(__VA_ARGS__))
|
---|
544 | #define gergrnam(...) (pthread_testcancel(), getgrnam(__VA_ARGS__))
|
---|
545 | #define getgrnam_r(...) (pthread_testcancel(), getgrnam_r(__VA_ARGS__))
|
---|
546 | #define gethostbyaddr(...) (pthread_testcancel(), gethostbyaddr(__VA_ARGS__))
|
---|
547 | #define gethostbyname(...) (pthread_testcancel(), gethostbyname(__VA_ARGS__))
|
---|
548 | #define gethostent(...) (pthread_testcancel(), gethostent(__VA_ARGS__))
|
---|
549 | #define gethostid(...) (pthread_testcancel(), gethostid(__VA_ARGS__))
|
---|
550 | #define gethostname(...) (pthread_testcancel(), gethostname(__VA_ARGS__))
|
---|
551 | #define getlogin(...) (pthread_testcancel(), getlogin(__VA_ARGS__))
|
---|
552 | #define getlogin_r(...) (pthread_testcancel(), getlogin_r(__VA_ARGS__))
|
---|
553 | #define getnameinfo(...) (pthread_testcancel(), getnameinfo(__VA_ARGS__))
|
---|
554 | #define getnetbyaddr(...) (pthread_testcancel(), getnetbyaddr(__VA_ARGS__))
|
---|
555 | #define getnetbyname(...) (pthread_testcancel(), getnetbyname(__VA_ARGS__))
|
---|
556 | #define getnetent(...) (pthread_testcancel(), getnetent(__VA_ARGS__))
|
---|
557 | #define getopt(...) (pthread_testcancel(), getopt(__VA_ARGS__))
|
---|
558 | #define getprotobyname(...) (pthread_testcancel(), getprotobyname(__VA_ARGS__))
|
---|
559 | #define getprotobynumber(...) (pthread_testcancel(), getprotobynumber(__VA_ARGS__))
|
---|
560 | #define getprotoent(...) (pthread_testcancel(), getprotoent(__VA_ARGS__))
|
---|
561 | #define getpwent(...) (pthread_testcancel(), getpwent(__VA_ARGS__))
|
---|
562 | #define getpwnam(...) (pthread_testcancel(), getpwnam(__VA_ARGS__))
|
---|
563 | #define getpwnam_r(...) (pthread_testcancel(), getpwnam_r(__VA_ARGS__))
|
---|
564 | #define getpwuid(...) (pthread_testcancel(), getpwuid(__VA_ARGS__))
|
---|
565 | #define getpwuid_r(...) (pthread_testcancel(), getpwuid_r(__VA_ARGS__))
|
---|
566 | #define gets(...) (pthread_testcancel(), gets(__VA_ARGS__))
|
---|
567 | #define getservbyname(...) (pthread_testcancel(), getservbyname(__VA_ARGS__))
|
---|
568 | #define getservbyport(...) (pthread_testcancel(), getservbyport(__VA_ARGS__))
|
---|
569 | #define getservent(...) (pthread_testcancel(), getservent(__VA_ARGS__))
|
---|
570 | #define getutxent(...) (pthread_testcancel(), getutxent(__VA_ARGS__))
|
---|
571 | #define getutxid(...) (pthread_testcancel(), getutxid(__VA_ARGS__))
|
---|
572 | #define getutxline(...) (pthread_testcancel(), getutxline(__VA_ARGS__))
|
---|
573 | #undef getwc
|
---|
574 | #define getwc(...) (pthread_testcancel(), getwc(__VA_ARGS__))
|
---|
575 | #undef getwchar
|
---|
576 | #define getwchar(...) (pthread_testcancel(), getwchar(__VA_ARGS__))
|
---|
577 | #define getwd(...) (pthread_testcancel(), getwd(__VA_ARGS__))
|
---|
578 | #define glob(...) (pthread_testcancel(), glob(__VA_ARGS__))
|
---|
579 | #define iconv_close(...) (pthread_testcancel(), iconv_close(__VA_ARGS__))
|
---|
580 | #define iconv_open(...) (pthread_testcancel(), iconv_open(__VA_ARGS__))
|
---|
581 | #define ioctl(...) (pthread_testcancel(), ioctl(__VA_ARGS__))
|
---|
582 | #define link(...) (pthread_testcancel(), link(__VA_ARGS__))
|
---|
583 | #define localtime(...) (pthread_testcancel(), localtime(__VA_ARGS__))
|
---|
584 | #define lseek(...) (pthread_testcancel(), lseek(__VA_ARGS__))
|
---|
585 | #define lstat(...) (pthread_testcancel(), lstat(__VA_ARGS__))
|
---|
586 | #define mkstemp(...) (pthread_testcancel(), mkstemp(__VA_ARGS__))
|
---|
587 | #define nftw(...) (pthread_testcancel(), nftw(__VA_ARGS__))
|
---|
588 | #define opendir(...) (pthread_testcancel(), opendir(__VA_ARGS__))
|
---|
589 | #define openlog(...) (pthread_testcancel(), openlog(__VA_ARGS__))
|
---|
590 | #define pathconf(...) (pthread_testcancel(), pathconf(__VA_ARGS__))
|
---|
591 | #define pclose(...) (pthread_testcancel(), pclose(__VA_ARGS__))
|
---|
592 | #define perror(...) (pthread_testcancel(), perror(__VA_ARGS__))
|
---|
593 | #define popen(...) (pthread_testcancel(), popen(__VA_ARGS__))
|
---|
594 | #define posix_fadvise(...) (pthread_testcancel(), posix_fadvise(__VA_ARGS__))
|
---|
595 | #define posix_fallocate(...) (pthread_testcancel(), posix_fallocate(__VA_ARGS__))
|
---|
596 | #define posix_madvise(...) (pthread_testcancel(), posix_madvise(__VA_ARGS__))
|
---|
597 | #define posix_openpt(...) (pthread_testcancel(), posix_openpt(__VA_ARGS__))
|
---|
598 | #define posix_spawn(...) (pthread_testcancel(), posix_spawn(__VA_ARGS__))
|
---|
599 | #define posix_spawnp(...) (pthread_testcancel(), posix_spawnp(__VA_ARGS__))
|
---|
600 | #define posix_trace_clear(...) (pthread_testcancel(), posix_trace_clear(__VA_ARGS__))
|
---|
601 | #define posix_trace_close(...) (pthread_testcancel(), posix_trace_close(__VA_ARGS__))
|
---|
602 | #define posix_trace_create(...) (pthread_testcancel(), posix_trace_create(__VA_ARGS__))
|
---|
603 | #define posix_trace_create_withlog(...) (pthread_testcancel(), posix_trace_create_withlog(__VA_ARGS__))
|
---|
604 | #define posix_trace_eventtypelist_getne(...) (pthread_testcancel(), posix_trace_eventtypelist_getne(__VA_ARGS__))
|
---|
605 | #define posix_trace_eventtypelist_rewin(...) (pthread_testcancel(), posix_trace_eventtypelist_rewin(__VA_ARGS__))
|
---|
606 | #define posix_trace_flush(...) (pthread_testcancel(), posix_trace_flush(__VA_ARGS__))
|
---|
607 | #define posix_trace_get_attr(...) (pthread_testcancel(), posix_trace_get_attr(__VA_ARGS__))
|
---|
608 | #define posix_trace_get_filter(...) (pthread_testcancel(), posix_trace_get_filter(__VA_ARGS__))
|
---|
609 | #define posix_trace_get_status(...) (pthread_testcancel(), posix_trace_get_status(__VA_ARGS__))
|
---|
610 | #define posix_trace_getnext_event(...) (pthread_testcancel(), posix_trace_getnext_event(__VA_ARGS__))
|
---|
611 | #define posix_trace_open(...) (pthread_testcancel(), posix_trace_open(__VA_ARGS__))
|
---|
612 | #define posix_trace_rewind(...) (pthread_testcancel(), posix_trace_rewind(__VA_ARGS__))
|
---|
613 | #define posix_trace_setfilter(...) (pthread_testcancel(), posix_trace_setfilter(__VA_ARGS__))
|
---|
614 | #define posix_trace_shutdown(...) (pthread_testcancel(), posix_trace_shutdown(__VA_ARGS__))
|
---|
615 | #define posix_trace_timedgetnext_event(...) (pthread_testcancel(), posix_trace_timedgetnext_event(__VA_ARGS__))
|
---|
616 | #define posix_typed_mem_open(...) (pthread_testcancel(), posix_typed_mem_open(__VA_ARGS__))
|
---|
617 | #define printf(...) (pthread_testcancel(), printf(__VA_ARGS__))
|
---|
618 | #define putc(...) (pthread_testcancel(), putc(__VA_ARGS__))
|
---|
619 | #define putc_unlocked(...) (pthread_testcancel(), putc_unlocked(__VA_ARGS__))
|
---|
620 | #define putchar(...) (pthread_testcancel(), putchar(__VA_ARGS__))
|
---|
621 | #define putchar_unlocked(...) (pthread_testcancel(), putchar_unlocked(__VA_ARGS__))
|
---|
622 | #define puts(...) (pthread_testcancel(), puts(__VA_ARGS__))
|
---|
623 | #define pututxline(...) (pthread_testcancel(), pututxline(__VA_ARGS__))
|
---|
624 | #undef putwc
|
---|
625 | #define putwc(...) (pthread_testcancel(), putwc(__VA_ARGS__))
|
---|
626 | #undef putwchar
|
---|
627 | #define putwchar(...) (pthread_testcancel(), putwchar(__VA_ARGS__))
|
---|
628 | #define readdir(...) (pthread_testcancel(), readdir(__VA_ARSG__))
|
---|
629 | #define readdir_r(...) (pthread_testcancel(), readdir_r(__VA_ARGS__))
|
---|
630 | #define remove(...) (pthread_testcancel(), remove(__VA_ARGS__))
|
---|
631 | #define rename(...) (pthread_testcancel(), rename(__VA_ARGS__))
|
---|
632 | #define rewind(...) (pthread_testcancel(), rewind(__VA_ARGS__))
|
---|
633 | #define rewinddir(...) (pthread_testcancel(), rewinddir(__VA_ARGS__))
|
---|
634 | #define scanf(...) (pthread_testcancel(), scanf(__VA_ARGS__))
|
---|
635 | #define seekdir(...) (pthread_testcancel(), seekdir(__VA_ARGS__))
|
---|
636 | #define semop(...) (pthread_testcancel(), semop(__VA_ARGS__))
|
---|
637 | #define setgrent(...) (pthread_testcancel(), setgrent(__VA_ARGS__))
|
---|
638 | #define sethostent(...) (pthread_testcancel(), sethostemt(__VA_ARGS__))
|
---|
639 | #define setnetent(...) (pthread_testcancel(), setnetent(__VA_ARGS__))
|
---|
640 | #define setprotoent(...) (pthread_testcancel(), setprotoent(__VA_ARGS__))
|
---|
641 | #define setpwent(...) (pthread_testcancel(), setpwent(__VA_ARGS__))
|
---|
642 | #define setservent(...) (pthread_testcancel(), setservent(__VA_ARGS__))
|
---|
643 | #define setutxent(...) (pthread_testcancel(), setutxent(__VA_ARGS__))
|
---|
644 | #define stat(...) (pthread_testcancel(), stat(__VA_ARGS__))
|
---|
645 | #define strerror(...) (pthread_testcancel(), strerror(__VA_ARGS__))
|
---|
646 | #define strerror_r(...) (pthread_testcancel(), strerror_r(__VA_ARGS__))
|
---|
647 | #define strftime(...) (pthread_testcancel(), strftime(__VA_ARGS__))
|
---|
648 | #define symlink(...) (pthread_testcancel(), symlink(__VA_ARGS__))
|
---|
649 | #define sync(...) (pthread_testcancel(), sync(__VA_ARGS__))
|
---|
650 | #define syslog(...) (pthread_testcancel(), syslog(__VA_ARGS__))
|
---|
651 | #define tmpfile(...) (pthread_testcancel(), tmpfile(__VA_ARGS__))
|
---|
652 | #define tmpnam(...) (pthread_testcancel(), tmpnam(__VA_ARGS__))
|
---|
653 | #define ttyname(...) (pthread_testcancel(), ttyname(__VA_ARGS__))
|
---|
654 | #define ttyname_r(...) (pthread_testcancel(), ttyname_r(__VA_ARGS__))
|
---|
655 | #define tzset(...) (pthread_testcancel(), tzset(__VA_ARGS__))
|
---|
656 | #define ungetc(...) (pthread_testcancel(), ungetc(__VA_ARGS__))
|
---|
657 | #define ungetwc(...) (pthread_testcancel(), ungetwc(__VA_ARGS__))
|
---|
658 | #define unlink(...) (pthread_testcancel(), unlink(__VA_ARGS__))
|
---|
659 | #define vfprintf(...) (pthread_testcancel(), vfprintf(__VA_ARGS__))
|
---|
660 | #define vfwprintf(...) (pthread_testcancel(), vfwprintf(__VA_ARGS__))
|
---|
661 | #define vprintf(...) (pthread_testcancel(), vprintf(__VA_ARGS__))
|
---|
662 | #define vwprintf(...) (pthread_testcancel(), vwprintf(__VA_ARGS__))
|
---|
663 | #define wcsftime(...) (pthread_testcancel(), wcsftime(__VA_ARGS__))
|
---|
664 | #define wordexp(...) (pthread_testcancel(), wordexp(__VA_ARGS__))
|
---|
665 | #define wprintf(...) (pthread_testcancel(), wprintf(__VA_ARGS__))
|
---|
666 | #define wscanf(...) (pthread_testcancel(), wscanf(__VA_ARGS__))
|
---|
667 | #endif
|
---|
668 |
|
---|
669 | /* We deal here with a gcc issue for posix threading on Windows.
|
---|
670 | We would need to change here gcc's gthr-posix.h header, but this
|
---|
671 | got rejected. So we deal it within this header. */
|
---|
672 | #ifdef _GTHREAD_USE_MUTEX_INIT_FUNC
|
---|
673 | #undef _GTHREAD_USE_MUTEX_INIT_FUNC
|
---|
674 | #endif
|
---|
675 | #define _GTHREAD_USE_MUTEX_INIT_FUNC 1
|
---|
676 |
|
---|
677 | #ifdef __cplusplus
|
---|
678 | }
|
---|
679 | #endif
|
---|
680 |
|
---|
681 | #endif /* WIN_PTHREADS_H */
|
---|