Lines Matching refs:rwlock
289 static void __read_lock(tdb_rwlock_t *rwlock)
294 __spin_lock(&rwlock->lock);
296 if (!(rwlock->count & RWLOCK_BIAS)) {
297 rwlock->count++;
298 __spin_unlock(&rwlock->lock);
302 __spin_unlock(&rwlock->lock);
304 while(rwlock->count & RWLOCK_BIAS) {
312 static void __write_lock(tdb_rwlock_t *rwlock)
317 __spin_lock(&rwlock->lock);
319 if (rwlock->count == 0) {
320 rwlock->count |= RWLOCK_BIAS;
321 __spin_unlock(&rwlock->lock);
325 __spin_unlock(&rwlock->lock);
327 while(rwlock->count != 0) {
335 static void __write_unlock(tdb_rwlock_t *rwlock)
337 __spin_lock(&rwlock->lock);
340 if (!(rwlock->count & RWLOCK_BIAS))
344 rwlock->count &= ~RWLOCK_BIAS;
345 __spin_unlock(&rwlock->lock);
348 static void __read_unlock(tdb_rwlock_t *rwlock)
350 __spin_lock(&rwlock->lock);
353 if (!rwlock->count)
356 if (rwlock->count & RWLOCK_BIAS)
360 rwlock->count--;
361 __spin_unlock(&rwlock->lock);