Lines Matching refs:rwlock

36   pthread_rwlock_t *rwlock = obj;  in rwlock_rd_extricate_func()  local
39 __pthread_lock(&rwlock->__rw_lock, NULL); in rwlock_rd_extricate_func()
40 did_remove = remove_from_queue(&rwlock->__rw_read_waiting, th); in rwlock_rd_extricate_func()
41 __pthread_unlock(&rwlock->__rw_lock); in rwlock_rd_extricate_func()
48 pthread_rwlock_t *rwlock = obj; in rwlock_wr_extricate_func() local
51 __pthread_lock(&rwlock->__rw_lock, NULL); in rwlock_wr_extricate_func()
52 did_remove = remove_from_queue(&rwlock->__rw_write_waiting, th); in rwlock_wr_extricate_func()
53 __pthread_unlock(&rwlock->__rw_lock); in rwlock_wr_extricate_func()
65 rwlock_is_in_list(pthread_descr self, pthread_rwlock_t *rwlock) in rwlock_is_in_list() argument
72 if (info->pr_lock == rwlock) in rwlock_is_in_list()
88 rwlock_add_to_list(pthread_descr self, pthread_rwlock_t *rwlock) in rwlock_add_to_list() argument
101 info->pr_lock = rwlock; in rwlock_add_to_list()
118 rwlock_remove_from_list(pthread_descr self, pthread_rwlock_t *rwlock) in rwlock_remove_from_list() argument
124 if ((*pinfo)->pr_lock == rwlock) in rwlock_remove_from_list()
143 rwlock_can_rdlock(pthread_rwlock_t *rwlock, int have_lock_already) in rwlock_can_rdlock() argument
146 if (rwlock->__rw_writer != NULL) in rwlock_can_rdlock()
150 if (rwlock->__rw_kind == PTHREAD_RWLOCK_PREFER_READER_NP) in rwlock_can_rdlock()
154 if (queue_is_empty(&rwlock->__rw_write_waiting)) in rwlock_can_rdlock()
183 rwlock_have_already(pthread_descr *pself, pthread_rwlock_t *rwlock, in rwlock_have_already() argument
190 if (rwlock->__rw_kind == PTHREAD_RWLOCK_PREFER_WRITER_NP) in rwlock_have_already()
195 existing = rwlock_is_in_list(self, rwlock); in rwlock_have_already()
202 existing = rwlock_add_to_list(self, rwlock); in rwlock_have_already()
215 __pthread_rwlock_init (pthread_rwlock_t *rwlock, in __pthread_rwlock_init() argument
218 __pthread_init_lock(&rwlock->__rw_lock); in __pthread_rwlock_init()
219 rwlock->__rw_readers = 0; in __pthread_rwlock_init()
220 rwlock->__rw_writer = NULL; in __pthread_rwlock_init()
221 rwlock->__rw_read_waiting = NULL; in __pthread_rwlock_init()
222 rwlock->__rw_write_waiting = NULL; in __pthread_rwlock_init()
226 rwlock->__rw_kind = PTHREAD_RWLOCK_DEFAULT_NP; in __pthread_rwlock_init()
227 rwlock->__rw_pshared = PTHREAD_PROCESS_PRIVATE; in __pthread_rwlock_init()
231 rwlock->__rw_kind = attr->__lockkind; in __pthread_rwlock_init()
232 rwlock->__rw_pshared = attr->__pshared; in __pthread_rwlock_init()
241 __pthread_rwlock_destroy (pthread_rwlock_t *rwlock) in strong_alias()
246 __pthread_lock (&rwlock->__rw_lock, NULL); in strong_alias()
247 readers = rwlock->__rw_readers; in strong_alias()
248 writer = rwlock->__rw_writer; in strong_alias()
249 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
259 __pthread_rwlock_rdlock (pthread_rwlock_t *rwlock) in strong_alias()
265 have_lock_already = rwlock_have_already(&self, rwlock, in strong_alias()
273 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
275 if (rwlock_can_rdlock(rwlock, have_lock_already)) in strong_alias()
278 enqueue (&rwlock->__rw_read_waiting, self); in strong_alias()
279 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
283 ++rwlock->__rw_readers; in strong_alias()
284 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
299 __pthread_rwlock_timedrdlock (pthread_rwlock_t *rwlock, in strong_alias()
310 have_lock_already = rwlock_have_already(&self, rwlock, in strong_alias()
317 extr.pu_object = rwlock; in strong_alias()
325 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
327 if (rwlock_can_rdlock(rwlock, have_lock_already)) in strong_alias()
330 enqueue (&rwlock->__rw_read_waiting, self); in strong_alias()
331 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
337 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
338 was_on_queue = remove_from_queue (&rwlock->__rw_read_waiting, self); in strong_alias()
339 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
354 ++rwlock->__rw_readers; in strong_alias()
355 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
370 __pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock) in strong_alias()
377 have_lock_already = rwlock_have_already(&self, rwlock, in strong_alias()
380 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
388 if (rwlock_can_rdlock(rwlock, 0)) in strong_alias()
390 ++rwlock->__rw_readers; in strong_alias()
394 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
413 __pthread_rwlock_wrlock (pthread_rwlock_t *rwlock) in strong_alias()
419 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
420 if (rwlock->__rw_readers == 0 && rwlock->__rw_writer == NULL) in strong_alias()
422 rwlock->__rw_writer = self; in strong_alias()
423 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
428 enqueue (&rwlock->__rw_write_waiting, self); in strong_alias()
429 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
437 __pthread_rwlock_timedwrlock (pthread_rwlock_t *rwlock, in strong_alias()
449 extr.pu_object = rwlock; in strong_alias()
457 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
459 if (rwlock->__rw_readers == 0 && rwlock->__rw_writer == NULL) in strong_alias()
461 rwlock->__rw_writer = self; in strong_alias()
463 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
468 enqueue (&rwlock->__rw_write_waiting, self); in strong_alias()
469 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
475 __pthread_lock (&rwlock->__rw_lock, self); in strong_alias()
476 was_on_queue = remove_from_queue (&rwlock->__rw_write_waiting, self); in strong_alias()
477 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
494 __pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock) in strong_alias()
498 __pthread_lock (&rwlock->__rw_lock, NULL); in strong_alias()
499 if (rwlock->__rw_readers == 0 && rwlock->__rw_writer == NULL) in strong_alias()
501 rwlock->__rw_writer = thread_self (); in strong_alias()
504 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
512 __pthread_rwlock_unlock (pthread_rwlock_t *rwlock) in strong_alias()
517 __pthread_lock (&rwlock->__rw_lock, NULL); in strong_alias()
518 if (rwlock->__rw_writer != NULL) in strong_alias()
521 if (rwlock->__rw_writer != thread_self ()) in strong_alias()
523 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
526 rwlock->__rw_writer = NULL; in strong_alias()
528 if ((rwlock->__rw_kind == PTHREAD_RWLOCK_PREFER_READER_NP in strong_alias()
529 && !queue_is_empty(&rwlock->__rw_read_waiting)) in strong_alias()
530 || (th = dequeue(&rwlock->__rw_write_waiting)) == NULL) in strong_alias()
533 torestart = rwlock->__rw_read_waiting; in strong_alias()
534 rwlock->__rw_read_waiting = NULL; in strong_alias()
535 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
542 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
549 if (rwlock->__rw_readers == 0) in strong_alias()
551 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
555 --rwlock->__rw_readers; in strong_alias()
556 if (rwlock->__rw_readers == 0) in strong_alias()
558 th = dequeue (&rwlock->__rw_write_waiting); in strong_alias()
562 __pthread_unlock (&rwlock->__rw_lock); in strong_alias()
568 if (rwlock->__rw_kind == PTHREAD_RWLOCK_PREFER_WRITER_NP) in strong_alias()
571 pthread_readlock_info *victim = rwlock_remove_from_list(self, rwlock); in strong_alias()