Lines Matching defs:lock

94 			event_warnx("Trying to disable lock functions after "
105 target->lock == cbs->lock &&
110 event_warnx("Can't change lock callbacks once they have been "
114 if (cbs->alloc && cbs->free && cbs->lock && cbs->unlock) {
168 * lock to protect count. */
170 void *lock;
180 if (!(result->lock = original_lock_fns_.alloc(
186 result->lock = NULL;
198 struct debug_lock *lock = lock_;
199 EVUTIL_ASSERT(lock->count == 0);
200 EVUTIL_ASSERT(locktype == lock->locktype);
201 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
203 original_lock_fns_.free(lock->lock,
204 lock->locktype|EVTHREAD_LOCKTYPE_RECURSIVE);
206 lock->lock = NULL;
207 lock->count = -100;
208 lock->signature = 0x12300fda;
209 mm_free(lock);
213 evthread_debug_lock_mark_locked(unsigned mode, struct debug_lock *lock)
215 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
216 ++lock->count;
217 if (!(lock->locktype & EVTHREAD_LOCKTYPE_RECURSIVE))
218 EVUTIL_ASSERT(lock->count == 1);
222 if (lock->count > 1)
223 EVUTIL_ASSERT(lock->held_by == me);
224 lock->held_by = me;
231 struct debug_lock *lock = lock_;
233 if (lock->locktype & EVTHREAD_LOCKTYPE_READWRITE)
237 if (original_lock_fns_.lock)
238 res = original_lock_fns_.lock(mode, lock->lock);
240 evthread_debug_lock_mark_locked(mode, lock);
246 evthread_debug_lock_mark_unlocked(unsigned mode, struct debug_lock *lock)
248 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
249 if (lock->locktype & EVTHREAD_LOCKTYPE_READWRITE)
256 EVUTIL_ASSERT(lock->held_by == me);
257 if (lock->count == 1)
258 lock->held_by = 0;
260 --lock->count;
261 EVUTIL_ASSERT(lock->count >= 0);
267 struct debug_lock *lock = lock_;
269 evthread_debug_lock_mark_unlocked(mode, lock);
271 res = original_lock_fns_.unlock(mode, lock->lock);
279 struct debug_lock *lock = lock_;
280 EVUTIL_ASSERT(lock);
281 EVUTIL_ASSERT(DEBUG_LOCK_SIG == lock->signature);
283 evthread_debug_lock_mark_unlocked(0, lock);
284 r = original_cond_fns_.wait_condition(cond_, lock->lock, tv);
285 evthread_debug_lock_mark_locked(0, lock);
326 struct debug_lock *lock = lock_;
327 if (! lock->count)
331 if (lock->held_by != me)
340 struct debug_lock *lock = lock_;
341 return lock->lock;
354 /* Case 1: allocate a debug lock. */
358 /* Case 2: wrap the lock in a debug lock. */
359 struct debug_lock *lock;
363 /* We can't wrap it: We need a recursive lock */
367 lock = mm_malloc(sizeof(struct debug_lock));
368 if (!lock) {
372 lock->lock = lock_;
373 lock->locktype = locktype;
374 lock->count = 0;
375 lock->held_by = 0;
376 return lock;
378 /* Case 3: allocate a regular lock */
382 /* Case 4: Fill in a debug lock with a real lock */
383 struct debug_lock *lock = lock_;
386 EVUTIL_ASSERT(lock->locktype == locktype);
387 EVUTIL_ASSERT(lock->lock == NULL);
388 lock->lock = original_lock_fns_.alloc(
390 if (!lock->lock) {
391 lock->count = -200;
392 mm_free(lock);
395 return lock;
413 evthreadimpl_lock_free_(void *lock, unsigned locktype)
416 evthread_lock_fns_.free(lock, locktype);
419 evthreadimpl_lock_lock_(unsigned mode, void *lock)
421 if (evthread_lock_fns_.lock)
422 return evthread_lock_fns_.lock(mode, lock);
427 evthreadimpl_lock_unlock_(unsigned mode, void *lock)
430 return evthread_lock_fns_.unlock(mode, lock);
455 evthreadimpl_cond_wait_(void *cond, void *lock, const struct timeval *tv)
458 return evthread_cond_fns_.wait_condition(cond, lock, tv);
471 return evthread_lock_fns_.lock != NULL;