Home | History | Annotate | Download | only in librt

Lines Matching defs:sem

1 /*	$NetBSD: sem.c,v 1.9 2019/02/21 21:33:34 christos Exp $	*/
62 __RCSID("$NetBSD: sem.c,v 1.9 2019/02/21 21:33:34 christos Exp $");
67 * versions of sem.c; both are fully kernel-assisted via the _ksem_*()
160 sem_to_semid(sem_t *sem)
163 if (SEM_IS_KSEMID(*sem))
164 return (intptr_t)*sem;
166 return (*sem)->ksem_semid;
170 sem_free(sem_t sem)
173 sem->ksem_magic = 0;
174 free(sem);
180 sem_t sem;
185 if ((sem = malloc(sizeof(struct _sem_st))) == NULL)
188 sem->ksem_magic = magic;
189 sem->ksem_semid = semid;
191 *semp = sem;
197 sem_init(sem_t *sem, int pshared, unsigned int value)
207 * We don't allocate a sem structure and return a pointer to it.
224 *sem = (sem_t)semid;
228 if ((error = sem_alloc(value, semid, SEM_MAGIC, sem)) != 0) {
238 sem_destroy(sem_t *sem)
243 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
249 if (SEM_IS_KSEMID(*sem)) {
250 error = _ksem_destroy((intptr_t)*sem);
252 if (SEM_IS_NAMED(*sem)) {
257 error = _ksem_destroy((*sem)->ksem_semid);
259 sem_free(*sem);
270 sem_t *sem, s;
306 if ((sem = malloc(sizeof(*sem))) == NULL) {
310 if ((error = sem_alloc(value, semid, SEM_MAGIC_NAMED, sem)) != 0)
313 LIST_INSERT_HEAD(&named_sems, *sem, ksem_list);
315 (*sem)->ksem_identity = sem;
317 return sem;
322 if (sem != NULL) {
323 if (*sem != NULL)
324 sem_free(*sem);
325 free(sem);
332 sem_close(sem_t *sem)
337 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
343 if (!SEM_IS_NAMED(*sem)) {
349 error = _ksem_close((*sem)->ksem_semid);
350 LIST_REMOVE((*sem), ksem_list);
353 sem_free(*sem);
354 free(sem);
368 sem_wait(sem_t *sem)
372 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
378 return _ksem_wait(sem_to_semid(sem));
382 sem_timedwait(sem_t *sem, const struct timespec * __restrict abstime)
386 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
392 return _ksem_timedwait(sem_to_semid(sem), abstime);
396 sem_trywait(sem_t *sem)
400 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
406 return _ksem_trywait(sem_to_semid(sem));
410 sem_post(sem_t *sem)
414 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
420 return _ksem_post(sem_to_semid(sem));
424 sem_getvalue(sem_t * __restrict sem, int * __restrict sval)
428 if (sem == NULL || *sem == NULL || !SEM_MAGIC_OK(*sem)) {
434 return _ksem_getvalue(sem_to_semid(sem), sval);