Fix mutex assertion
[openafs.git] / src / rx / SOLARIS / rx_kmutex.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  * rx_kmutex.h - mutex and condition variable macros for kernel environment.
12  *
13  * Solaris implementation.
14  */
15
16 #ifndef _RX_KMUTEX_H_
17 #define _RX_KMUTEX_H_
18
19 #if     defined(AFS_SUN5_ENV) && defined(KERNEL)
20
21 #define RX_ENABLE_LOCKS 1
22
23 #include <sys/tiuser.h>
24 #include <sys/t_lock.h>
25 #include <sys/mutex.h>
26
27 typedef kmutex_t afs_kmutex_t;
28 typedef kcondvar_t afs_kcondvar_t;
29
30 #define MUTEX_DESTROY(a)        mutex_destroy(a)
31 #define MUTEX_INIT(a,b,c,d)     mutex_init(a, b, c, d)
32 #define MUTEX_ASSERT(a)         osi_Assert(mutex_owned((afs_kmutex_t *)(a)))
33 #define CV_INIT(a,b,c,d)        cv_init(a, b, c, d)
34 #define CV_DESTROY(a)           cv_destroy(a)
35 #define CV_SIGNAL(a)            cv_signal(a)
36 #define CV_BROADCAST(a)         cv_broadcast(a)
37
38 #ifdef RX_LOCKS_DB
39
40 #define MUTEX_ENTER(a) \
41     do { \
42         mutex_enter(a); \
43         rxdb_grablock((a), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
44     } while(0)
45
46 #define MUTEX_TRYENTER(a) \
47     (mutex_tryenter(a) ? (rxdb_grablock((a), osi_ThreadUnique(), \
48      rxdb_fileID, __LINE__), 1) : 0)
49
50 #define MUTEX_EXIT(a) \
51     do { \
52         rxdb_droplock((a), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
53         mutex_exit(a); \
54     } while(0)
55
56 #define CV_WAIT_SIG(cv, m)      afs_cv_wait(cv, m, 1, rxdb_fileID, __LINE__)
57 #define CV_WAIT(cv, m)          afs_cv_wait(cv, m, 0, rxdb_fileID, __LINE__)
58
59 #define CV_TIMEDWAIT(cv, m, t)  \
60                         afs_cv_timedwait(cv, lck, t, 0, rxdb_fileID, __LINE__)
61
62 #else /* RX_LOCKS_DB */
63
64 #define MUTEX_ENTER(a)          mutex_enter(a)
65 #define MUTEX_TRYENTER(a)       mutex_tryenter(a)
66 #define MUTEX_EXIT(a)           mutex_exit(a)
67
68 #define CV_WAIT_SIG(cv, m)      afs_cv_wait(cv, m, 1)
69 #define CV_WAIT(cv, m)          afs_cv_wait(cv, m, 0)
70
71 #define CV_TIMEDWAIT(cv, m, t)  afs_cv_timedwait(cv, m, t, 0)
72
73 #endif /* RX_LOCKS_DB */
74
75 #endif /* SUN5 && KERNEL */
76
77 #endif /* _RX_KMUTEX_H_ */