diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-02-12 22:19:54 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-02-12 22:19:54 +0000 |
commit | ec35eb5520514769818fa4440d4801f803e8fb4c (patch) | |
tree | 83392dc48bee86816efa52e93670190f3c57df5d /evthread-internal.h | |
parent | d0a9c90e9300f7dc5701e9682d80c85025504573 (diff) | |
download | libevent-ec35eb5520514769818fa4440d4801f803e8fb4c.tar.gz |
Make threading functions global, like the mm_ functions. Use the libevent_pthread.la library in regress_pthread.
svn:r1121
Diffstat (limited to 'evthread-internal.h')
-rw-r--r-- | evthread-internal.h | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/evthread-internal.h b/evthread-internal.h index 00268651..b5355843 100644 --- a/evthread-internal.h +++ b/evthread-internal.h @@ -27,40 +27,58 @@ #define _EVTHREAD_INTERNAL_H_ #ifdef __cplusplus -extern "C" { +//extern "C" { #endif #include "event-config.h" struct event_base; + #ifndef _EVENT_DISABLE_THREAD_SUPPORT -#define EVTHREAD_USE_LOCKS(base) \ - (base != NULL && (base)->th_lock != NULL) +extern void (*_evthread_locking_fn)(int mode, void *lock); +extern unsigned long (*_evthread_id_fn)(void); +extern void *(*_evthread_lock_alloc_fn)(void); +extern void (*_evthread_lock_free_fn)(void *); + +#define EVBASE_USING_LOCKS(base) \ + (base != NULL && (base)->th_base_lock != NULL) + +#define EVTHREAD_GET_ID() \ + (_evthread_id_fn ? _evthread_id_fn() : 1) -#define EVTHREAD_IN_THREAD(base) \ - ((base)->th_get_id == NULL || \ - (base)->th_owner_id == (*(base)->th_get_id)()) +#define EVBASE_IN_THREAD(base) \ + (_evthread_id_fn == NULL || \ + (base)->th_owner_id == _evthread_id_fn()) -#define EVTHREAD_GET_ID(base) \ - (*(base)->th_get_id)() +#define EVTHREAD_ALLOC_LOCK(lockvar) \ + ((lockvar) = _evthread_lock_alloc_fn ? \ + _evthread_lock_alloc_fn() : NULL) -#define EVTHREAD_ACQUIRE_LOCK(base, mode, lock) do { \ - if (EVTHREAD_USE_LOCKS(base)) \ - (*(base)->th_lock)(EVTHREAD_LOCK | mode, \ - (base)->lock); \ +#define EVTHREAD_FREE_LOCK(lockvar) \ + do { \ + if (lockvar && _evthread_lock_free_fn) \ + _evthread_lock_free_fn(lockvar); \ + } while (0); + +#define EVBASE_ACQUIRE_LOCK(base, mode, lock) do { \ + if (EVBASE_USING_LOCKS(base)) \ + _evthread_locking_fn(EVTHREAD_LOCK | mode, \ + (base)->lock); \ } while (0) -#define EVTHREAD_RELEASE_LOCK(base, mode, lock) do { \ - if (EVTHREAD_USE_LOCKS(base)) \ - (*(base)->th_lock)(EVTHREAD_UNLOCK | mode, \ - (base)->lock); \ +#define EVBASE_RELEASE_LOCK(base, mode, lock) do { \ + if (EVBASE_USING_LOCKS(base)) \ + _evthread_locking_fn(EVTHREAD_UNLOCK | mode, \ + (base)->lock); \ } while (0) #else /* _EVENT_DISABLE_THREAD_SUPPORT */ -#define EVTHREAD_USE_LOCKS(base) -#define EVTHREAD_IN_THREAD(base) 1 -#define EVTHREAD_GET_ID(base) -#define EVTHREAD_ACQUIRE_LOCK(base, mode, lock) -#define EVTHREAD_RELEASE_LOCK(base, mode, lock) +#define EVTHREAD_GET_ID() 1 +#define EVTHREAD_ALLOC_LOCK(lockvar) +#define EVTHREAD_FREE_LOCK(lockvar) + +#define EVBASE_IN_THREAD() 1 +#define EVBASE_ACQUIRE_LOCK(base, mode, lock) +#define EVBASE_RELEASE_LOCK(base, mode, lock) #endif #ifdef __cplusplus |