Lines Matching refs:sem

37 #include <sys/sem.h>
446 int uv_sem_init(uv_sem_t* sem, unsigned int value) {
449 err = semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value);
462 void uv_sem_destroy(uv_sem_t* sem) {
463 if (semaphore_destroy(mach_task_self(), *sem))
468 void uv_sem_post(uv_sem_t* sem) {
469 if (semaphore_signal(*sem))
474 void uv_sem_wait(uv_sem_t* sem) {
478 r = semaphore_wait(*sem);
486 int uv_sem_trywait(uv_sem_t* sem) {
493 err = semaphore_timedwait(*sem, interval);
548 uv_semaphore_t* sem;
550 sem = uv__malloc(sizeof(*sem));
551 if (sem == NULL)
554 if ((err = uv_mutex_init(&sem->mutex)) != 0) {
555 uv__free(sem);
559 if ((err = uv_cond_init(&sem->cond)) != 0) {
560 uv_mutex_destroy(&sem->mutex);
561 uv__free(sem);
565 sem->value = value;
566 *(uv_semaphore_t**)sem_ = sem;
572 uv_semaphore_t* sem;
574 sem = *(uv_semaphore_t**)sem_;
575 uv_cond_destroy(&sem->cond);
576 uv_mutex_destroy(&sem->mutex);
577 uv__free(sem);
582 uv_semaphore_t* sem;
584 sem = *(uv_semaphore_t**)sem_;
585 uv_mutex_lock(&sem->mutex);
586 sem->value++;
587 if (sem->value == 1)
588 uv_cond_signal(&sem->cond);
589 uv_mutex_unlock(&sem->mutex);
594 uv_semaphore_t* sem;
596 sem = *(uv_semaphore_t**)sem_;
597 uv_mutex_lock(&sem->mutex);
598 while (sem->value == 0)
599 uv_cond_wait(&sem->cond, &sem->mutex);
600 sem->value--;
601 uv_mutex_unlock(&sem->mutex);
606 uv_semaphore_t* sem;
608 sem = *(uv_semaphore_t**)sem_;
609 if (uv_mutex_trylock(&sem->mutex) != 0)
612 if (sem->value == 0) {
613 uv_mutex_unlock(&sem->mutex);
617 sem->value--;
618 uv_mutex_unlock(&sem->mutex);
623 static int uv__sem_init(uv_sem_t* sem, unsigned int value) {
624 if (sem_init(sem, 0, value))
630 static void uv__sem_destroy(uv_sem_t* sem) {
631 if (sem_destroy(sem))
636 static void uv__sem_post(uv_sem_t* sem) {
637 if (sem_post(sem))
642 static void uv__sem_wait(uv_sem_t* sem) {
646 r = sem_wait(sem);
654 static int uv__sem_trywait(uv_sem_t* sem) {
658 r = sem_trywait(sem);
670 int uv_sem_init(uv_sem_t* sem, unsigned int value) {
676 return uv__custom_sem_init(sem, value);
678 return uv__sem_init(sem, value);
682 void uv_sem_destroy(uv_sem_t* sem) {
684 uv__custom_sem_destroy(sem);
686 uv__sem_destroy(sem);
690 void uv_sem_post(uv_sem_t* sem) {
692 uv__custom_sem_post(sem);
694 uv__sem_post(sem);
698 void uv_sem_wait(uv_sem_t* sem) {
700 uv__custom_sem_wait(sem);
702 uv__sem_wait(sem);
706 int uv_sem_trywait(uv_sem_t* sem) {
708 return uv__custom_sem_trywait(sem);
710 return uv__sem_trywait(sem);