Lines Matching refs:readers
38 #define ASSERT_CONSISTENT_STATE(readers) \
39 ASSERT(!((readers) & URW_WRITE_LOCKED) || \
40 ((readers) & ~URW_HAS_WAITERS) == URW_WRITE_LOCKED)
139 uint32_t readers;
147 readers = *rwstate;
148 ASSERT_CONSISTENT_STATE(readers);
149 if (!(readers & URW_WRITE_LOCKED) &&
150 (readers & URW_READERS_MASK) != 0) {
182 uint32_t readers;
188 readers = *rwstate;
189 ASSERT_CONSISTENT_STATE(readers);
190 rval = ((readers & URW_WRITE_LOCKED) &&
279 * Attempt to acquire a readers lock. Return true on success.
287 uint32_t readers;
291 while (((readers = *rwstate) & mask) == 0) {
292 if (atomic_cas_32(rwstate, readers, readers + 1) == readers) {
308 uint32_t readers;
312 while (((readers = *rwstate) & URW_HAS_WAITERS) == 0) {
313 if (atomic_cas_32(rwstate, readers, readers - 1) == readers) {
333 uint32_t readers;
336 while (((readers = *rwstate) & mask) == 0) {
337 if (atomic_cas_32(rwstate, readers, readers | URW_WRITE_LOCKED)
338 == readers) {
354 uint32_t readers;
358 while (((readers = *rwstate) & URW_HAS_WAITERS) == 0) {
359 if (atomic_cas_32(rwstate, readers, 0) == readers) {
377 uint32_t readers;
394 readers = *rwstate;
395 ASSERT_CONSISTENT_STATE(readers);
396 if (readers & URW_WRITE_LOCKED) /* drop the writer lock */
398 else /* drop the readers lock */
400 if (!(readers & URW_HAS_WAITERS)) { /* no waiters */
412 readers = *rwstate; /* must fetch the value again */
413 ASSERT_CONSISTENT_STATE(readers);
414 ASSERT(readers & URW_HAS_WAITERS);
415 readers &= URW_READERS_MASK; /* count of current readers */
420 * to wake up as many readers as we encounter before encountering
440 if (writer != 0 || readers != 0)
448 readers++;
507 uint32_t readers;
538 readers = *rwstate;
539 ASSERT_CONSISTENT_STATE(readers);
579 uint32_t readers;
609 readers = *rwstate;
610 ASSERT_CONSISTENT_STATE(readers);
611 if ((readers & URW_WRITE_LOCKED) ||
613 (readers & URW_READERS_MASK) != 0))
663 * Enqueue writers ahead of readers.
716 * If we already hold a readers lock on this rwlock,
820 * If we hold a readers lock on this rwlock, bail out.
825 "calling thread owns the readers lock");
924 * If we already hold a readers lock on this rwlock,
1011 uint32_t readers;
1017 readers = *rwstate;
1018 ASSERT_CONSISTENT_STATE(readers);
1019 if (readers & URW_WRITE_LOCKED) {
1021 readers = 0;
1024 readers &= URW_READERS_MASK;
1047 } else if (readers > 0) {
1049 * A readers lock is held; if we don't hold one, bail out.
1059 "readers lock held, "
1064 * If we hold more than one readers lock on this rwlock,