Lines Matching defs:sema

45 #include <sys/sema.h>
48 sema_init(struct sema *sema, int value, const char *description)
53 bzero(sema, sizeof(*sema));
54 mtx_init(&sema->sema_mtx, description, "sema backing lock",
56 cv_init(&sema->sema_cv, description);
57 sema->sema_value = value;
59 CTR4(KTR_LOCK, "%s(%p, %d, \"%s\")", __func__, sema, value, description);
63 sema_destroy(struct sema *sema)
66 CTR3(KTR_LOCK, "%s(%p) \"%s\"", __func__, sema,
67 cv_wmesg(&sema->sema_cv));
69 KASSERT((sema->sema_waiters == 0), ("%s(): waiters\n", __func__));
71 mtx_destroy(&sema->sema_mtx);
72 cv_destroy(&sema->sema_cv);
76 _sema_post(struct sema *sema, const char *file, int line)
79 mtx_lock(&sema->sema_mtx);
80 sema->sema_value++;
81 if (sema->sema_waiters && sema->sema_value > 0)
82 cv_signal(&sema->sema_cv);
84 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
85 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
87 mtx_unlock(&sema->sema_mtx);
91 _sema_wait(struct sema *sema, const char *file, int line)
94 mtx_lock(&sema->sema_mtx);
95 while (sema->sema_value == 0) {
96 sema->sema_waiters++;
97 cv_wait(&sema->sema_cv, &sema->sema_mtx);
98 sema->sema_waiters--;
100 sema->sema_value--;
102 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
103 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
105 mtx_unlock(&sema->sema_mtx);
109 _sema_timedwait(struct sema *sema, int timo, const char *file, int line)
113 mtx_lock(&sema->sema_mtx);
121 for (error = 0; sema->sema_value == 0 && error == 0;) {
122 sema->sema_waiters++;
123 error = cv_timedwait(&sema->sema_cv, &sema->sema_mtx, timo);
124 sema->sema_waiters--;
126 if (sema->sema_value > 0) {
128 sema->sema_value--;
131 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
132 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
134 CTR5(KTR_LOCK, "%s(%p) \"%s\" fail at %s:%d", __func__, sema,
135 cv_wmesg(&sema->sema_cv), file, line);
138 mtx_unlock(&sema->sema_mtx);
143 _sema_trywait(struct sema *sema, const char *file, int line)
147 mtx_lock(&sema->sema_mtx);
149 if (sema->sema_value > 0) {
151 sema->sema_value--;
154 CTR6(KTR_LOCK, "%s(%p) \"%s\" v = %d at %s:%d", __func__, sema,
155 cv_wmesg(&sema->sema_cv), sema->sema_value, file, line);
159 CTR5(KTR_LOCK, "%s(%p) \"%s\" fail at %s:%d", __func__, sema,
160 cv_wmesg(&sema->sema_cv), file, line);
163 mtx_unlock(&sema->sema_mtx);
168 sema_value(struct sema *sema)
172 mtx_lock(&sema->sema_mtx);
173 ret = sema->sema_value;
174 mtx_unlock(&sema->sema_mtx);