41 #include <sys/param.h>
45 #include "UpnpUniStd.h"
54 #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
58 #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
62 #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
63 #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
64 #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
66 #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP
67 #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP
68 #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP
72 #define ITHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
73 #define ITHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
76 #define ITHREAD_CANCELED PTHREAD_CANCELED
79 #define ITHREAD_STACK_MIN PTHREAD_STACK_MIN
80 #define ITHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
81 #define ITHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
91 typedef pthread_t ithread_t;
102 typedef pthread_attr_t ithread_attr_t;
112 typedef void *(*start_routine)(
void *arg);
123 typedef pthread_cond_t ithread_cond_t;
134 typedef pthread_mutexattr_t ithread_mutexattr_t;
145 typedef pthread_mutex_t ithread_mutex_t;
157 typedef pthread_condattr_t ithread_condattr_t;
169 typedef pthread_rwlockattr_t ithread_rwlockattr_t;
182 typedef pthread_rwlock_t ithread_rwlock_t;
185 typedef ithread_mutex_t ithread_rwlock_t;
200 static UPNP_INLINE int ithread_initialize_library(
void) {
203 #if defined(WIN32) && defined(PTW32_STATIC_LIB)
204 ret = !pthread_win32_process_attach_np();
222 static UPNP_INLINE int ithread_cleanup_library(
void) {
225 #if defined(WIN32) && defined(PTW32_STATIC_LIB)
226 ret = !pthread_win32_process_detach_np();
244 static UPNP_INLINE int ithread_initialize_thread(
void) {
247 #if defined(WIN32) && defined(PTW32_STATIC_LIB)
248 ret = !pthread_win32_thread_attach_np();
266 static UPNP_INLINE int ithread_cleanup_thread(
void) {
269 #if defined(WIN32) && defined(PTW32_STATIC_LIB)
270 ret = !pthread_win32_thread_detach_np();
291 #define ithread_mutexattr_init pthread_mutexattr_init
308 #define ithread_mutexattr_destroy pthread_mutexattr_destroy
330 #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
331 #define ithread_mutexattr_setkind_np pthread_mutexattr_settype
333 #define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np
355 #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
356 #define ithread_mutexattr_getkind_np pthread_mutexattr_gettype
358 #define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np
377 #define ithread_mutex_init pthread_mutex_init
394 #define ithread_mutex_lock pthread_mutex_lock
412 #define ithread_mutex_unlock pthread_mutex_unlock
431 #define ithread_mutex_destroy pthread_mutex_destroy
448 #define ithread_rwlockattr_init pthread_rwlockattr_init
466 #define ithread_rwlockattr_destroy pthread_rwlockattr_destroy
489 #define ithread_rwlockatttr_setpshared pthread_rwlockatttr_setpshared
512 #define ithread_rwlockatttr_getpshared pthread_rwlockatttr_getpshared
532 #define ithread_rwlock_init pthread_rwlock_init
535 #define ithread_rwlock_init ithread_mutex_init
553 #define ithread_rwlock_rdlock pthread_rwlock_rdlock
556 #define ithread_rwlock_rdlock ithread_mutex_lock
574 #define ithread_rwlock_wrlock pthread_rwlock_wrlock
577 #define ithread_rwlock_wrlock ithread_mutex_lock
597 #define ithread_rwlock_unlock pthread_rwlock_unlock
600 #define ithread_rwlock_unlock ithread_mutex_unlock
621 #define ithread_rwlock_destroy pthread_rwlock_destroy
624 #define ithread_rwlock_destroy ithread_mutex_destroy
641 #define ithread_cond_init pthread_cond_init
658 #define ithread_cond_signal pthread_cond_signal
675 #define ithread_cond_broadcast pthread_cond_broadcast
696 #define ithread_cond_wait pthread_cond_wait
720 #define ithread_cond_timedwait pthread_cond_timedwait
737 #define ithread_cond_destroy pthread_cond_destroy
751 #define ithread_attr_init pthread_attr_init
765 #define ithread_attr_destroy pthread_attr_destroy
781 #define ithread_attr_setstacksize pthread_attr_setstacksize
797 #define ithread_attr_setdetachstate pthread_attr_setdetachstate
816 #define ithread_create pthread_create
830 #define ithread_cancel pthread_cancel
843 #define ithread_exit pthread_exit
855 #define ithread_get_current_thread_id pthread_self
867 #define ithread_self pthread_self
881 #define ithread_detach pthread_detach
900 #define ithread_join pthread_join
917 #define isleep(x) Sleep((x)*1000)
937 #define imillisleep Sleep
939 #define imillisleep(x) usleep(1000*x)
943 #if !defined(PTHREAD_MUTEX_RECURSIVE) && !defined(__DragonFly__) && !defined(UPNP_USE_MSVCPP)
946 EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr,
int kind);