Lines Matching refs:sem
58 _sem_wait(sem_t sem, int can_eintr, const struct timespec *abstime, in _sem_wait() argument
64 atomic_inc_int(&sem->waitcount); in _sem_wait()
66 while ((val = sem->value) > 0) { in _sem_wait()
67 if (atomic_cas_uint(&sem->value, val, val - 1) == val) { in _sem_wait()
69 atomic_dec_int(&sem->waitcount); in _sem_wait()
76 error = _twait(&sem->value, 0, CLOCK_REALTIME, abstime); in _sem_wait()
82 atomic_dec_int(&sem->waitcount); in _sem_wait()
89 _sem_post(sem_t sem) in _sem_post() argument
92 atomic_inc_int(&sem->value); in _sem_post()
93 _wake(&sem->value, 1); in _sem_post()
103 sem_t sem; in sem_init() local
145 sem = calloc(1, sizeof(*sem)); in sem_init()
146 if (!sem) { in sem_init()
150 sem->value = value; in sem_init()
151 *semp = sem; in sem_init()
159 sem_t sem; in sem_destroy() local
164 if (!semp || !(sem = *semp)) { in sem_destroy()
169 if (sem->waitcount) { in sem_destroy()
178 if (sem->shared) in sem_destroy()
179 munmap(sem, SEM_MMAP_SIZE); in sem_destroy()
181 free(sem); in sem_destroy()
189 sem_t sem; in sem_getvalue() local
191 if (!semp || !(sem = *semp)) { in sem_getvalue()
196 *sval = sem->value; in sem_getvalue()
204 sem_t sem; in sem_post() local
206 if (!semp || !(sem = *semp)) { in sem_post()
211 _sem_post(sem); in sem_post()
221 sem_t sem; in sem_wait() local
229 if (!semp || !(sem = *semp)) { in sem_wait()
235 error = _sem_wait(sem, 1, NULL, &self->delayed_cancel); in sem_wait()
241 sem->value, errno); in sem_wait()
253 sem_t sem; in sem_timedwait() local
257 if (!semp || !(sem = *semp) || !abstime || !timespecisvalid(abstime)) { in sem_timedwait()
267 error = _sem_wait(sem, 1, abstime, &self->delayed_cancel); in sem_timedwait()
273 sem->value, errno); in sem_timedwait()
283 sem_t sem; in sem_trywait() local
286 if (!semp || !(sem = *semp)) { in sem_trywait()
291 while ((val = sem->value) > 0) { in sem_trywait()
292 if (atomic_cas_uint(&sem->value, val, val - 1) == val) { in sem_trywait()
299 _rthread_debug(1, "%s: v=%d errno=%d\n", __func__, sem->value, errno); in sem_trywait()
318 sem_t sem, *semp; in sem_open() local
377 sem = mmap(NULL, SEM_MMAP_SIZE, PROT_READ | PROT_WRITE, in sem_open()
380 if (sem == MAP_FAILED) { in sem_open()
386 munmap(sem, SEM_MMAP_SIZE); in sem_open()
391 sem->value = value; in sem_open()
392 sem->shared = 1; in sem_open()
394 *semp = sem; in sem_open()
402 sem_t sem; in sem_close() local
404 if (!semp || !(sem = *semp) || !sem->shared) { in sem_close()
410 munmap(sem, SEM_MMAP_SIZE); in sem_close()