Lines Matching refs:lock

107 			event_warnx("Trying to disable lock functions after "
118 target->lock == cbs->lock &&
123 event_warnx("Can't change lock callbacks once they have been "
127 if (cbs->alloc && cbs->free && cbs->lock && cbs->unlock) {
189 * lock to protect count. */
191 void *lock;
201 if (!(result->lock = original_lock_fns_.alloc(
207 result->lock = NULL;
219 struct debug_lock *lock = lock_;
220 EVUTIL_ASSERT(lock->count == 0);
221 EVUTIL_ASSERT(locktype == lock->locktype);
222 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
224 original_lock_fns_.free(lock->lock,
225 lock->locktype|EVTHREAD_LOCKTYPE_RECURSIVE);
227 lock->lock = NULL;
228 lock->count = -100;
229 lock->signature = 0x12300fda;
230 mm_free(lock);
234 evthread_debug_lock_mark_locked(unsigned mode, struct debug_lock *lock)
236 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
237 ++lock->count;
238 if (!(lock->locktype & EVTHREAD_LOCKTYPE_RECURSIVE))
239 EVUTIL_ASSERT(lock->count == 1);
243 if (lock->count > 1)
244 EVUTIL_ASSERT(lock->held_by == me);
245 lock->held_by = me;
252 struct debug_lock *lock = lock_;
254 if (lock->locktype & EVTHREAD_LOCKTYPE_READWRITE)
258 if (original_lock_fns_.lock)
259 res = original_lock_fns_.lock(mode, lock->lock);
261 evthread_debug_lock_mark_locked(mode, lock);
267 evthread_debug_lock_mark_unlocked(unsigned mode, struct debug_lock *lock)
269 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
270 if (lock->locktype & EVTHREAD_LOCKTYPE_READWRITE)
277 EVUTIL_ASSERT(lock->held_by == me);
278 if (lock->count == 1)
279 lock->held_by = 0;
281 --lock->count;
282 EVUTIL_ASSERT(lock->count >= 0);
288 struct debug_lock *lock = lock_;
290 evthread_debug_lock_mark_unlocked(mode, lock);
292 res = original_lock_fns_.unlock(mode, lock->lock);
300 struct debug_lock *lock = lock_;
301 EVUTIL_ASSERT(lock);
302 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
304 evthread_debug_lock_mark_unlocked(0, lock);
305 r = original_cond_fns_.wait_condition(cond_, lock->lock, tv);
306 evthread_debug_lock_mark_locked(0, lock);
347 struct debug_lock *lock = lock_;
348 if (! lock->count)
352 if (lock->held_by != me)
361 struct debug_lock *lock = lock_;
362 return lock->lock;
375 /* Case 1: allocate a debug lock. */
379 /* Case 2: wrap the lock in a debug lock. */
380 struct debug_lock *lock;
384 /* We can't wrap it: We need a recursive lock */
388 lock = mm_malloc(sizeof(struct debug_lock));
389 if (!lock) {
393 lock->lock = lock_;
394 lock->locktype = locktype;
395 lock->count = 0;
396 lock->held_by = 0;
397 return lock;
399 /* Case 3: allocate a regular lock */
403 /* Case 4: Fill in a debug lock with a real lock */
404 struct debug_lock *lock = lock_ ? lock_ : debug_lock_alloc(locktype);
407 EVUTIL_ASSERT(lock->locktype == locktype);
408 if (!lock->lock) {
409 lock->lock = original_lock_fns_.alloc(
411 if (!lock->lock) {
412 lock->count = -200;
413 mm_free(lock);
417 return lock;
441 evthreadimpl_lock_free_(void *lock, unsigned locktype)
444 evthread_lock_fns_.free(lock, locktype);
447 evthreadimpl_lock_lock_(unsigned mode, void *lock)
449 if (evthread_lock_fns_.lock)
450 return evthread_lock_fns_.lock(mode, lock);
455 evthreadimpl_lock_unlock_(unsigned mode, void *lock)
458 return evthread_lock_fns_.unlock(mode, lock);
489 evthreadimpl_cond_wait_(void *cond, void *lock, const struct timeval *tv)
492 return evthread_cond_fns_.wait_condition(cond, lock, tv);
505 return evthread_lock_fns_.lock != NULL;