Lines Matching refs:sem
57 _sem_wait(sem_t sem, int can_eintr, const struct timespec *abstime, in _sem_wait() argument
60 void *ident = (void *)&sem->waitcount; in _sem_wait()
63 if (sem->shared) in _sem_wait()
66 _spinlock(&sem->lock); in _sem_wait()
67 if (sem->value) { in _sem_wait()
68 sem->value--; in _sem_wait()
71 sem->waitcount++; in _sem_wait()
74 &sem->lock, delayed_cancel); in _sem_wait()
75 _spinlock(&sem->lock); in _sem_wait()
80 } while (r == 0 && sem->value == 0); in _sem_wait()
81 sem->waitcount--; in _sem_wait()
83 sem->value--; in _sem_wait()
85 _spinunlock(&sem->lock); in _sem_wait()
91 _sem_post(sem_t sem) in _sem_post() argument
93 void *ident = (void *)&sem->waitcount; in _sem_post()
96 if (sem->shared) in _sem_post()
99 _spinlock(&sem->lock); in _sem_post()
100 sem->value++; in _sem_post()
101 if (sem->waitcount) { in _sem_post()
105 _spinunlock(&sem->lock); in _sem_post()
115 sem_t sem; in sem_init() local
157 sem = calloc(1, sizeof(*sem)); in sem_init()
158 if (!sem) { in sem_init()
162 sem->lock = _SPINLOCK_UNLOCKED; in sem_init()
163 sem->value = value; in sem_init()
164 *semp = sem; in sem_init()
172 sem_t sem; in sem_destroy() local
177 if (!semp || !(sem = *semp)) { in sem_destroy()
182 if (sem->waitcount) { in sem_destroy()
191 if (sem->shared) in sem_destroy()
192 munmap(sem, SEM_MMAP_SIZE); in sem_destroy()
194 free(sem); in sem_destroy()
202 sem_t sem; in sem_getvalue() local
204 if (!semp || !(sem = *semp)) { in sem_getvalue()
209 _spinlock(&sem->lock); in sem_getvalue()
210 *sval = sem->value; in sem_getvalue()
211 _spinunlock(&sem->lock); in sem_getvalue()
219 sem_t sem; in sem_post() local
221 if (!semp || !(sem = *semp)) { in sem_post()
226 _sem_post(sem); in sem_post()
236 sem_t sem; in sem_wait() local
244 if (!semp || !(sem = *semp)) { in sem_wait()
250 r = _sem_wait(sem, 1, NULL, &self->delayed_cancel); in sem_wait()
266 sem_t sem; in sem_timedwait() local
270 if (!semp || !(sem = *semp) || !abstime || !timespecisvalid(abstime)) { in sem_timedwait()
280 r = _sem_wait(sem, 1, abstime, &self->delayed_cancel); in sem_timedwait()
294 sem_t sem; in sem_trywait() local
297 if (!semp || !(sem = *semp)) { in sem_trywait()
302 _spinlock(&sem->lock); in sem_trywait()
303 if (sem->value) { in sem_trywait()
304 sem->value--; in sem_trywait()
308 _spinunlock(&sem->lock); in sem_trywait()
333 sem_t sem, *semp; in sem_open() local
392 sem = mmap(NULL, SEM_MMAP_SIZE, PROT_READ | PROT_WRITE, in sem_open()
395 if (sem == MAP_FAILED) { in sem_open()
401 munmap(sem, SEM_MMAP_SIZE); in sem_open()
406 sem->lock = _SPINLOCK_UNLOCKED; in sem_open()
407 sem->value = value; in sem_open()
408 sem->shared = 1; in sem_open()
410 *semp = sem; in sem_open()
418 sem_t sem; in sem_close() local
420 if (!semp || !(sem = *semp) || !sem->shared) { in sem_close()
426 munmap(sem, SEM_MMAP_SIZE); in sem_close()