Lines Matching refs:semaphore
54 void semaphore_free(semaphore_t *semaphore) { in semaphore_free() argument
55 if (!semaphore) in semaphore_free()
58 if (semaphore->fd != INVALID_FD) in semaphore_free()
59 close(semaphore->fd); in semaphore_free()
60 osi_free(semaphore); in semaphore_free()
63 void semaphore_wait(semaphore_t *semaphore) { in semaphore_wait() argument
64 assert(semaphore != NULL); in semaphore_wait()
65 assert(semaphore->fd != INVALID_FD); in semaphore_wait()
68 if (eventfd_read(semaphore->fd, &value) == -1) in semaphore_wait()
72 bool semaphore_try_wait(semaphore_t *semaphore) { in semaphore_try_wait() argument
73 assert(semaphore != NULL); in semaphore_try_wait()
74 assert(semaphore->fd != INVALID_FD); in semaphore_try_wait()
76 int flags = TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_GETFL)); in semaphore_try_wait()
81 if (TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_SETFL, flags | O_NONBLOCK)) == -1) { in semaphore_try_wait()
87 if (eventfd_read(semaphore->fd, &value) == -1) in semaphore_try_wait()
90 if (TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_SETFL, flags)) == -1) in semaphore_try_wait()
95 void semaphore_post(semaphore_t *semaphore) { in semaphore_post() argument
96 assert(semaphore != NULL); in semaphore_post()
97 assert(semaphore->fd != INVALID_FD); in semaphore_post()
99 if (eventfd_write(semaphore->fd, 1ULL) == -1) in semaphore_post()
103 int semaphore_get_fd(const semaphore_t *semaphore) { in semaphore_get_fd() argument
104 assert(semaphore != NULL); in semaphore_get_fd()
105 assert(semaphore->fd != INVALID_FD); in semaphore_get_fd()
106 return semaphore->fd; in semaphore_get_fd()