| 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 */ |