OSDN Git Service

uClibc_pthread.h: do not install on target
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / common / bits / uClibc_mutex.h
index c6094c3..94597e8 100644 (file)
@@ -13,7 +13,9 @@
 #ifdef __UCLIBC_HAS_THREADS__
 
 #include <pthread.h>
+#ifdef _LIBC
 #include <bits/uClibc_pthread.h>
+#endif
 
 #define __UCLIBC_MUTEX_TYPE                            pthread_mutex_t
 
@@ -22,6 +24,9 @@
 #define __UCLIBC_MUTEX_STATIC(M,I)                     static pthread_mutex_t M = I
 #define __UCLIBC_MUTEX_EXTERN(M)                       extern pthread_mutex_t M
 
+#define __UCLIBC_MUTEX_INIT_VAR(M)                                                             \
+               ((M) = (pthread_mutex_t) PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
+
 #define __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)                                                           \
                __pthread_mutex_lock(&(M))
 
@@ -34,7 +39,8 @@
 #define __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)                                                           \
        do {                                                                                            \
                struct _pthread_cleanup_buffer __infunc_pthread_cleanup_buffer;                         \
-               if (C) {                                                                                \
+               int __infunc_need_locking = (C);                                                        \
+               if (__infunc_need_locking) {                                                            \
                        _pthread_cleanup_push_defer(&__infunc_pthread_cleanup_buffer,                   \
                                           (void (*) (void *))__pthread_mutex_unlock,                   \
                                                                                &(M));                  \
@@ -43,7 +49,7 @@
                ((void)0)
 
 #define __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)                                                         \
-               if (C) {                                                                                \
+               if (__infunc_need_locking) {                                                            \
                        _pthread_cleanup_pop_restore(&__infunc_pthread_cleanup_buffer,1);               \
                }                                                                                       \
        } while (0)
 #define __UCLIBC_IO_MUTEX_AUTO_UNLOCK(M,A)          __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)
 #define __UCLIBC_IO_MUTEX_LOCK_CANCEL_UNSAFE(M)     __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)
 #define __UCLIBC_IO_MUTEX_UNLOCK_CANCEL_UNSAFE(M)   __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)
-#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C)     __UCLIBC_MUTEX_CONDITIONAL_LOCK(M, 1)
-#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C)   __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M, 1)
+#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C)     __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)
+#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C)   __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)
 
 #endif /* of __USE_STDIO_FUTEXES__ */
 
 #define __UCLIBC_MUTEX_STATIC(M,I)                     extern void *__UCLIBC_MUTEX_DUMMY_ ## M
 #define __UCLIBC_MUTEX_EXTERN(M)                       extern void *__UCLIBC_MUTEX_DUMMY_ ## M
 
+#define __UCLIBC_MUTEX_INIT_VAR(M)                                     ((void)0)
 #define __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)           ((void)0)
 #define __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)         ((void)0)
 #define __UCLIBC_MUTEX_TRYLOCK_CANCEL_UNSAFE(M)                (0)     /* Always succeed? */
 #define __UCLIBC_IO_MUTEX_AUTO_UNLOCK(M,A)          __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)
 #define __UCLIBC_IO_MUTEX_LOCK_CANCEL_UNSAFE(M)     __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)
 #define __UCLIBC_IO_MUTEX_UNLOCK_CANCEL_UNSAFE(M)   __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)
-#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C)     __UCLIBC_MUTEX_CONDITIONAL_LOCK(M, 1)
-#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C)   __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M, 1)
+#define __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK(M,C)     __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)
+#define __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK(M,C)   __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)
 
 #endif /* of __UCLIBC_HAS_THREADS__ */