Lines Matching refs:mutex
21 void __fio_mutex_remove(struct fio_mutex *mutex) in __fio_mutex_remove() argument
23 assert(mutex->magic == FIO_MUTEX_MAGIC); in __fio_mutex_remove()
24 pthread_cond_destroy(&mutex->cond); in __fio_mutex_remove()
27 void fio_mutex_remove(struct fio_mutex *mutex) in fio_mutex_remove() argument
29 __fio_mutex_remove(mutex); in fio_mutex_remove()
30 munmap((void *) mutex, sizeof(*mutex)); in fio_mutex_remove()
33 int __fio_mutex_init(struct fio_mutex *mutex, int value) in __fio_mutex_init() argument
39 mutex->value = value; in __fio_mutex_init()
40 mutex->magic = FIO_MUTEX_MAGIC; in __fio_mutex_init()
63 pthread_cond_init(&mutex->cond, &cond); in __fio_mutex_init()
65 ret = pthread_mutex_init(&mutex->lock, &attr); in __fio_mutex_init()
78 struct fio_mutex *mutex = NULL; in fio_mutex_init() local
80 mutex = (void *) mmap(NULL, sizeof(struct fio_mutex), in fio_mutex_init()
83 if (mutex == MAP_FAILED) { in fio_mutex_init()
88 if (!__fio_mutex_init(mutex, value)) in fio_mutex_init()
89 return mutex; in fio_mutex_init()
91 fio_mutex_remove(mutex); in fio_mutex_init()
100 int fio_mutex_down_timeout(struct fio_mutex *mutex, unsigned int seconds) in fio_mutex_down_timeout() argument
106 assert(mutex->magic == FIO_MUTEX_MAGIC); in fio_mutex_down_timeout()
112 pthread_mutex_lock(&mutex->lock); in fio_mutex_down_timeout()
114 while (!mutex->value && !ret) { in fio_mutex_down_timeout()
115 mutex->waiters++; in fio_mutex_down_timeout()
121 ret = pthread_cond_timedwait(&mutex->cond, &mutex->lock, &t); in fio_mutex_down_timeout()
125 mutex->waiters--; in fio_mutex_down_timeout()
129 mutex->value--; in fio_mutex_down_timeout()
130 pthread_mutex_unlock(&mutex->lock); in fio_mutex_down_timeout()
136 int fio_mutex_down_trylock(struct fio_mutex *mutex) in fio_mutex_down_trylock() argument
140 assert(mutex->magic == FIO_MUTEX_MAGIC); in fio_mutex_down_trylock()
142 pthread_mutex_lock(&mutex->lock); in fio_mutex_down_trylock()
143 if (mutex->value) { in fio_mutex_down_trylock()
144 mutex->value--; in fio_mutex_down_trylock()
147 pthread_mutex_unlock(&mutex->lock); in fio_mutex_down_trylock()
152 void fio_mutex_down(struct fio_mutex *mutex) in fio_mutex_down() argument
154 assert(mutex->magic == FIO_MUTEX_MAGIC); in fio_mutex_down()
156 pthread_mutex_lock(&mutex->lock); in fio_mutex_down()
158 while (!mutex->value) { in fio_mutex_down()
159 mutex->waiters++; in fio_mutex_down()
160 pthread_cond_wait(&mutex->cond, &mutex->lock); in fio_mutex_down()
161 mutex->waiters--; in fio_mutex_down()
164 mutex->value--; in fio_mutex_down()
165 pthread_mutex_unlock(&mutex->lock); in fio_mutex_down()
168 void fio_mutex_up(struct fio_mutex *mutex) in fio_mutex_up() argument
172 assert(mutex->magic == FIO_MUTEX_MAGIC); in fio_mutex_up()
174 pthread_mutex_lock(&mutex->lock); in fio_mutex_up()
176 if (!mutex->value && mutex->waiters) in fio_mutex_up()
178 mutex->value++; in fio_mutex_up()
179 pthread_mutex_unlock(&mutex->lock); in fio_mutex_up()
182 pthread_cond_signal(&mutex->cond); in fio_mutex_up()