Lines Matching refs:sem
37 #include <sys/sem.h>
439 int uv_sem_init(uv_sem_t* sem, unsigned int value) {
442 err = semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value);
455 void uv_sem_destroy(uv_sem_t* sem) {
456 if (semaphore_destroy(mach_task_self(), *sem))
461 void uv_sem_post(uv_sem_t* sem) {
462 if (semaphore_signal(*sem))
467 void uv_sem_wait(uv_sem_t* sem) {
471 r = semaphore_wait(*sem);
479 int uv_sem_trywait(uv_sem_t* sem) {
486 err = semaphore_timedwait(*sem, interval);
541 uv_semaphore_t* sem;
543 sem = uv__malloc(sizeof(*sem));
544 if (sem == NULL)
547 if ((err = uv_mutex_init(&sem->mutex)) != 0) {
548 uv__free(sem);
552 if ((err = uv_cond_init(&sem->cond)) != 0) {
553 uv_mutex_destroy(&sem->mutex);
554 uv__free(sem);
558 sem->value = value;
559 *(uv_semaphore_t**)sem_ = sem;
565 uv_semaphore_t* sem;
567 sem = *(uv_semaphore_t**)sem_;
568 uv_cond_destroy(&sem->cond);
569 uv_mutex_destroy(&sem->mutex);
570 uv__free(sem);
575 uv_semaphore_t* sem;
577 sem = *(uv_semaphore_t**)sem_;
578 uv_mutex_lock(&sem->mutex);
579 sem->value++;
580 if (sem->value == 1)
581 uv_cond_signal(&sem->cond); /* Release one to replace us. */
582 uv_mutex_unlock(&sem->mutex);
587 uv_semaphore_t* sem;
589 sem = *(uv_semaphore_t**)sem_;
590 uv_mutex_lock(&sem->mutex);
591 while (sem->value == 0)
592 uv_cond_wait(&sem->cond, &sem->mutex);
593 sem->value--;
594 uv_mutex_unlock(&sem->mutex);
599 uv_semaphore_t* sem;
601 sem = *(uv_semaphore_t**)sem_;
602 if (uv_mutex_trylock(&sem->mutex) != 0)
605 if (sem->value == 0) {
606 uv_mutex_unlock(&sem->mutex);
610 sem->value--;
611 uv_mutex_unlock(&sem->mutex);
616 static int uv__sem_init(uv_sem_t* sem, unsigned int value) {
617 if (sem_init(sem, 0, value))
623 static void uv__sem_destroy(uv_sem_t* sem) {
624 if (sem_destroy(sem))
629 static void uv__sem_post(uv_sem_t* sem) {
630 if (sem_post(sem))
635 static void uv__sem_wait(uv_sem_t* sem) {
639 r = sem_wait(sem);
647 static int uv__sem_trywait(uv_sem_t* sem) {
651 r = sem_trywait(sem);
663 int uv_sem_init(uv_sem_t* sem, unsigned int value) {
669 return uv__custom_sem_init(sem, value);
671 return uv__sem_init(sem, value);
675 void uv_sem_destroy(uv_sem_t* sem) {
677 uv__custom_sem_destroy(sem);
679 uv__sem_destroy(sem);
683 void uv_sem_post(uv_sem_t* sem) {
685 uv__custom_sem_post(sem);
687 uv__sem_post(sem);
691 void uv_sem_wait(uv_sem_t* sem) {
693 uv__custom_sem_wait(sem);
695 uv__sem_wait(sem);
699 int uv_sem_trywait(uv_sem_t* sem) {
701 return uv__custom_sem_trywait(sem);
703 return uv__sem_trywait(sem);