bge: Avoid accessing invalid internal memory region on BCM5906
[dragonfly.git] / sys / sys / condvar.h
1 #ifndef _SYS_CONDVAR_H_
2 #define _SYS_CONDVAR_H_
3
4 #include <sys/spinlock.h>
5
6 struct lock;
7
8 struct cv {
9         struct spinlock cv_lock;
10         int             cv_waiters;
11         const char      *cv_desc;
12 };
13
14 void    cv_init(struct cv *, const char *desc);
15 void    cv_destroy(struct cv *);
16
17 int     _cv_timedwait(struct cv *, struct lock *, int timo, int wakesig);
18 void    _cv_signal(struct cv *, int broadcast);
19
20 int     cv_has_waiters(const struct cv *);
21
22 #define cv_wait(cv, lock)                       \
23                 _cv_timedwait((cv), (lock), 0, 0)
24 #define cv_wait_sig(cv, lock)                   \
25                 _cv_timedwait((cv), (lock), 0, 1)
26 #define cv_timedwait(cv, lock, timeo)           \
27                 _cv_timedwait((cv), (lock), (timeo), 0)
28 #define cv_timedwait_sig(cv, lock, timeo)       \
29                 _cv_timedwait((cv), (lock), (timeo), 1)
30
31 #define cv_signal(cv)                           \
32                 _cv_signal((cv), 0)
33 #define cv_broadcast(cv)                        \
34                 _cv_signal((cv), 1)
35 #define cv_broadcastpri(cv, pri)                \
36                 cv_broadcast((cv))
37
38 #endif  /* _SYS_CONDVAR_H_ */