Add opr/lock.h and tidy locking macros
[openafs.git] / src / opr / opr_lock.h
1 /*
2  * Copyright (c) 2012 Your File System Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 #ifndef OPENAFS_OPR_LOCK_H
25 #define OPENAFS_OPR_LOCK_H 1
26
27 #include <pthread.h>
28
29 typedef pthread_mutex_t opr_mutex_t;
30
31 # define opr_mutex_init(mutex) \
32     opr_Verify(pthread_mutex_init(mutex, NULL) == 0)
33
34 # define opr_mutex_destroy(mutex) \
35     opr_Verify(pthread_mutex_destroy(mutex) == 0)
36
37 # define opr_mutex_enter(mutex) \
38     opr_Verify(pthread_mutex_lock(mutex) == 0)
39
40 # define opr_mutex_exit(mutex) \
41     opr_Verify(pthread_mutex_unlock(mutex) == 0)
42
43 # define opr_mutex_tryenter(mutex) \
44     (pthread_mutex_trylock(mutex) ? 0: 1)
45
46 typedef pthread_cond_t opr_cv_t;
47
48 # define opr_cv_init(condvar) \
49     opr_Verify(pthread_cond_init(condvar, NULL) == 0)
50
51 # define opr_cv_destroy(condvar) \
52     opr_Verify(pthread_cond_destroy(condvar) == 0)
53
54 # define opr_cv_wait(condvar, mutex) \
55     opr_Verify(pthread_cond_wait(condvar, mutex) == 0)
56
57 # define opr_cv_timedwait(condvar, mutex, timeout) \
58     pthread_cond_timedwait(condvar, mutex, timeout)
59
60 # define opr_cv_signal(condvar) \
61     opr_Verify(pthread_cond_signal(condvar) == 0)
62
63 # define opr_cv_broadcast(condvar) \
64     opr_Verify(pthread_cond_broadcast(condvar) == 0)
65
66 #endif /* OPENAFS_OPR_LOCK_H */