summaryrefslogtreecommitdiff
path: root/evthread-internal.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-02-12 22:19:54 +0000
committerNick Mathewson <nickm@torproject.org>2009-02-12 22:19:54 +0000
commitec35eb5520514769818fa4440d4801f803e8fb4c (patch)
tree83392dc48bee86816efa52e93670190f3c57df5d /evthread-internal.h
parentd0a9c90e9300f7dc5701e9682d80c85025504573 (diff)
downloadlibevent-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.h60
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