Lines Matching defs:sema

47 #include <sys/sema.h>
50 sema_init(struct sema *sema, int value, const char *description)
55 bzero(sema, sizeof(*sema));
56 mtx_init(&sema->sema_mtx, description, "sema backing lock",
58 cv_init(&sema->sema_cv, description);
59 sema->sema_value = value;
61 CTR4(KTR_LOCK, "%s(%p, %d, \"%s\")", __func__, sema, value, description);
65 sema_destroy(struct sema *sema)
68 CTR3(KTR_LOCK, "%s(%p) \"%s\"", __func__, sema,
69 cv_wmesg(&sema->sema_cv));
71 KASSERT((sema->sema_waiters == 0), ("%s(): waiters\n", __func__));
73 mtx_destroy(&sema->sema_mtx);
74 cv_destroy(&sema->sema_cv);
78 _sema_post(struct sema *sema, const char *file, int line)
81 mtx_lock(&sema->sema_mtx);
82 sema->sema_value++;
83 if (sema->sema_waiters && sema->sema_value > 0)
84 cv_signal(&sema->sema_cv);
86 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
87 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
89 mtx_unlock(&sema->sema_mtx);
93 _sema_wait(struct sema *sema, const char *file, int line)
96 mtx_lock(&sema->sema_mtx);
97 while (sema->sema_value == 0) {
98 sema->sema_waiters++;
99 cv_wait(&sema->sema_cv, &sema->sema_mtx);
100 sema->sema_waiters--;
102 sema->sema_value--;
104 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
105 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
107 mtx_unlock(&sema->sema_mtx);
111 _sema_timedwait(struct sema *sema, int timo, const char *file, int line)
115 mtx_lock(&sema->sema_mtx);
123 for (error = 0; sema->sema_value == 0 && error == 0;) {
124 sema->sema_waiters++;
125 error = cv_timedwait(&sema->sema_cv, &sema->sema_mtx, timo);
126 sema->sema_waiters--;
128 if (sema->sema_value > 0) {
130 sema->sema_value--;
133 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
134 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
136 CTR5(KTR_LOCK, "%s(%p) \"%s\" fail at %s:%d", __func__, sema,
137 cv_wmesg(&sema->sema_cv), file, line);
140 mtx_unlock(&sema->sema_mtx);
145 _sema_trywait(struct sema *sema, const char *file, int line)
149 mtx_lock(&sema->sema_mtx);
151 if (sema->sema_value > 0) {
153 sema->sema_value--;
156 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
157 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
161 CTR5(KTR_LOCK, "%s(%p) \"%s\" fail at %s:%d", __func__, sema,
162 cv_wmesg(&sema->sema_cv), file, line);
165 mtx_unlock(&sema->sema_mtx);
170 sema_value(struct sema *sema)
174 mtx_lock(&sema->sema_mtx);
175 ret = sema->sema_value;
176 mtx_unlock(&sema->sema_mtx);