diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-04-05 02:43:55 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-04-05 02:43:55 +0000 |
commit | 70ee390fc9696f555d383b64541c5fe205443d72 (patch) | |
tree | bfe512bf1c59384d4eca0245d1fa4baf419ccfe0 /evthread-internal.h | |
parent | f1b1bad415332f6d49a59eb40004ca1d7946c4da (diff) | |
download | libevent-70ee390fc9696f555d383b64541c5fe205443d72.tar.gz |
Add some more utility macros to evthread-internal.h
svn:r1132
Diffstat (limited to 'evthread-internal.h')
-rw-r--r-- | evthread-internal.h | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/evthread-internal.h b/evthread-internal.h index b5355843..1b803b1d 100644 --- a/evthread-internal.h +++ b/evthread-internal.h @@ -58,7 +58,47 @@ extern void (*_evthread_lock_free_fn)(void *); do { \ if (lockvar && _evthread_lock_free_fn) \ _evthread_lock_free_fn(lockvar); \ - } while (0); + } while (0) + +#define EVLOCK_LOCK(lock,mode) \ + do { \ + if (lock) \ + _evthread_locking_fn(EVTHREAD_LOCK|mode, lock); \ + } while (0) +#define EVLOCK_UNLOCK(lock,mode) \ + do { \ + if (lock) \ + _evthread_locking_fn(EVTHREAD_UNLOCK|mode, lock); \ + } while (0) +#define _EVLOCK_SORTLOCKS(lockvar1, lockvar2) \ + do { \ + if (lockvar1 && lockvar2 && lockvar1 > lockvar2) { \ + void *tmp = lockvar1; \ + lockvar1 = lockvar2; \ + lockvar2 = tmp; \ + } \ + } while (0) + +#define EVLOCK_LOCK2(lock1,lock2,mode1,mode2) \ + do { \ + void *_lock1_tmplock = (lock1); \ + void *_lock2_tmplock = (lock2); \ + _EVLOCK_SORTLOCKS(_lock1_tmplock,_lock2_tmplock); \ + EVLOCK_LOCK(_lock1_tmplock,mode1); \ + if (_lock2_tmplock != _lock1_tmplock) \ + EVLOCK_LOCK(_lock2_tmplock,mode2); \ + } while (0) + +#define EVLOCK_UNLOCK2(lock1,lock2,mode1,mode2) \ + do { \ + void *_lock1_tmplock = (lock1); \ + void *_lock2_tmplock = (lock2); \ + _EVLOCK_SORTLOCKS(_lock1_tmplock,_lock2_tmplock); \ + if (_lock2_tmplock != _lock1_tmplock) \ + EVLOCK_UNLOCK(_lock2_tmplock,mode2); \ + EVLOCK_UNLOCK(_lock1_tmplock,mode1); \ + } while (0) + #define EVBASE_ACQUIRE_LOCK(base, mode, lock) do { \ if (EVBASE_USING_LOCKS(base)) \ |