Lines Matching refs:lock
67 volatile u_int lock; member
106 rlock_acquire(rtld_lock_t lock, RtldLockState *state) in rlock_acquire() argument
111 v = lock->lock; in rlock_acquire()
115 if (atomic_fcmpset_int(&lock->lock, &v, v + RC_INCR)) { in rlock_acquire()
120 if (lock->owner == tid) { in rlock_acquire()
121 ++lock->count; in rlock_acquire()
125 if (atomic_fcmpset_int(&lock->lock, &v, v | SLFLAG)) { in rlock_acquire()
126 umtx_sleep(&lock->lock, v, 0); in rlock_acquire()
134 wlock_acquire(rtld_lock_t lock, RtldLockState *state) in wlock_acquire() argument
140 if (lock->owner == tid) { in wlock_acquire()
141 ++lock->count; in wlock_acquire()
147 v = lock->lock; in wlock_acquire()
150 if (atomic_fcmpset_int(&lock->lock, &v, WAFLAG)) in wlock_acquire()
153 if (atomic_fcmpset_int(&lock->lock, &v, v | SLFLAG)) { in wlock_acquire()
154 umtx_sleep(&lock->lock, v, 0); in wlock_acquire()
159 lock->owner = tid; in wlock_acquire()
160 lock->count = 1; in wlock_acquire()
161 lock->savesigmask = tmp_oldsigmask; in wlock_acquire()
166 lock_release(rtld_lock_t lock, RtldLockState *state) in lock_release() argument
173 if ((lock->lock & WAFLAG) == 0) { in lock_release()
174 v = atomic_fetchadd_int(&lock->lock, -RC_INCR) - RC_INCR; in lock_release()
176 atomic_clear_int(&lock->lock, SLFLAG); in lock_release()
177 umtx_wakeup(&lock->lock, 0); in lock_release()
179 } else if (--lock->count == 0) { in lock_release()
180 tmp_oldsigmask = lock->savesigmask; in lock_release()
181 lock->owner = NULL; in lock_release()
182 v = atomic_fetchadd_int(&lock->lock, -WAFLAG) - WAFLAG; in lock_release()
184 atomic_clear_int(&lock->lock, SLFLAG); in lock_release()
185 umtx_wakeup(&lock->lock, 0); in lock_release()
194 lock_reset(rtld_lock_t lock) in lock_reset() argument
196 memset(lock, 0, sizeof(*lock)); in lock_reset()
200 lock_upgrade(rtld_lock_t lock, RtldLockState *state) in lock_upgrade() argument
205 lock_release(lock, state); in lock_upgrade()
206 wlock_acquire(lock, state); in lock_upgrade()