OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [libposix/] [include/] [posix/] [bits/] [uClibc_mutex.h] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/* Copyright (C) 2006   Manuel Novoa III    <mjn3@codepoet.org>
2
 *
3
 * GNU Library General Public License (LGPL) version 2 or later.
4
 *
5
 * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details.
6
 */
7
 
8
#ifndef _UCLIBC_MUTEX_H
9
#define _UCLIBC_MUTEX_H
10
 
11
#include <features.h>
12
 
13
#ifdef __UCLIBC_HAS_THREADS__
14
 
15
#include <pthread.h>
16
#include <bits/uClibc_pthread.h>
17
 
18
#define __UCLIBC_MUTEX_TYPE                             pthread_mutex_t
19
 
20
#define __UCLIBC_MUTEX(M)                               pthread_mutex_t M
21
#define __UCLIBC_MUTEX_INIT(M,I)                        pthread_mutex_t M = I
22
#define __UCLIBC_MUTEX_STATIC(M,I)                      static pthread_mutex_t M = I
23
#define __UCLIBC_MUTEX_EXTERN(M)                        extern pthread_mutex_t M
24
 
25
#define __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)                                                            \
26
                __pthread_mutex_lock(&(M))
27
 
28
#define __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)                                                          \
29
                __pthread_mutex_unlock(&(M))
30
 
31
#define __UCLIBC_MUTEX_TRYLOCK_CANCEL_UNSAFE(M)                                                         \
32
                __pthread_mutex_trylock(&(M))
33
 
34
#define __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)                                                            \
35
        do {                                                                                            \
36
                struct _pthread_cleanup_buffer __infunc_pthread_cleanup_buffer;                         \
37
                if (C) {                                                                                \
38
                        _pthread_cleanup_push_defer(&__infunc_pthread_cleanup_buffer,                   \
39
                                           (void (*) (void *))__pthread_mutex_unlock,                   \
40
                                                                                &(M));                  \
41
                        __pthread_mutex_lock(&(M));                                                     \
42
                }                                                                                       \
43
                ((void)0)
44
 
45
#define __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)                                                          \
46
                if (C) {                                                                                \
47
                        _pthread_cleanup_pop_restore(&__infunc_pthread_cleanup_buffer,1);               \
48
                }                                                                                       \
49
        } while (0)
50
 
51
#define __UCLIBC_MUTEX_AUTO_LOCK_VAR(A)         int A
52
 
53
#define __UCLIBC_MUTEX_AUTO_LOCK(M,A,V)                                                                 \
54
        __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,((A=(V)) == 0))
55
 
56
#define __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)                                                                 \
57
        __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,(A == 0))
58
 
59
#define __UCLIBC_MUTEX_LOCK(M)                                                                          \
60
        __UCLIBC_MUTEX_CONDITIONAL_LOCK(M, 1)
61
 
62
#define __UCLIBC_MUTEX_UNLOCK(M)                                                                        \
63
        __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M, 1)
64
 
65
#else
66
 
67
#define __UCLIBC_MUTEX(M)                               void *__UCLIBC_MUTEX_DUMMY_ ## M
68
#define __UCLIBC_MUTEX_INIT(M,I)                        extern void *__UCLIBC_MUTEX_DUMMY_ ## M
69
#define __UCLIBC_MUTEX_STATIC(M,I)                      extern void *__UCLIBC_MUTEX_DUMMY_ ## M
70
#define __UCLIBC_MUTEX_EXTERN(M)                        extern void *__UCLIBC_MUTEX_DUMMY_ ## M
71
 
72
#define __UCLIBC_MUTEX_LOCK_CANCEL_UNSAFE(M)            ((void)0)
73
#define __UCLIBC_MUTEX_UNLOCK_CANCEL_UNSAFE(M)          ((void)0)
74
#define __UCLIBC_MUTEX_TRYLOCK_CANCEL_UNSAFE(M)         (0)     /* Always succeed? */
75
 
76
#define __UCLIBC_MUTEX_CONDITIONAL_LOCK(M,C)            ((void)0)
77
#define __UCLIBC_MUTEX_CONDITIONAL_UNLOCK(M,C)          ((void)0)
78
 
79
#define __UCLIBC_MUTEX_AUTO_LOCK_VAR(A)                 ((void)0)
80
#define __UCLIBC_MUTEX_AUTO_LOCK(M,A,V)                 ((void)0)
81
#define __UCLIBC_MUTEX_AUTO_UNLOCK(M,A)                 ((void)0)
82
 
83
#define __UCLIBC_MUTEX_LOCK(M)                          ((void)0)
84
#define __UCLIBC_MUTEX_UNLOCK(M)                        ((void)0)
85
 
86
#endif
87
 
88
#endif /* _UCLIBC_MUTEX_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.