[libdispatch-dev] [PATCH 10/17] consolidate hashing of dispatch_kevent_t

Paolo Bonzini bonzini at gnu.org
Sun Oct 18 08:04:10 PDT 2009


This removes a few #ifdef HAVE_MACH.
---
 src/source.c |   40 ++++++++++++++++++----------------------
 1 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/src/source.c b/src/source.c
index 3fcf7b4..031d204 100644
--- a/src/source.c
+++ b/src/source.c
@@ -142,14 +142,22 @@ _evfiltstr(short filt)
 
 static TAILQ_HEAD(, dispatch_kevent_s) _dispatch_sources[DSL_HASH_SIZE];
 
-static dispatch_kevent_t
-_dispatch_kevent_find(uintptr_t ident, short filter)
+static inline uintptr_t
+_dispatch_kevent_hash(uintptr_t ident, short filter)
 {
+	uintptr_t value;
 #ifdef HAVE_MACH
-	uintptr_t hash = DSL_HASH(filter == EVFILT_MACHPORT ? MACH_PORT_INDEX(ident) : ident);
+	value = (filter == EVFILT_MACHPORT ? MACH_PORT_INDEX(ident) : ident);
 #else
-	uintptr_t hash = DSL_HASH(ident);
+	value = ident;
 #endif
+	return DSL_HASH(value);
+}
+
+static dispatch_kevent_t
+_dispatch_kevent_find(uintptr_t ident, short filter)
+{
+	uintptr_t hash = _dispatch_kevent_hash(ident, filter);
 	dispatch_kevent_t dki;
 
 	TAILQ_FOREACH(dki, &_dispatch_sources[hash], dk_list) {
@@ -163,12 +171,8 @@ _dispatch_kevent_find(uintptr_t ident, short filter)
 static void
 _dispatch_kevent_insert(dispatch_kevent_t dk)
 {
-	uintptr_t ident = dk->dk_kevent.ident;
-#ifdef HAVE_MACH
-	uintptr_t hash = DSL_HASH(dk->dk_kevent.filter == EVFILT_MACHPORT ? MACH_PORT_INDEX(ident) : ident);
-#else
-	uintptr_t hash = DSL_HASH(ident);
-#endif
+	uintptr_t hash = _dispatch_kevent_hash(dk->dk_kevent.ident,
+					       dk->dk_kevent.filter);
 
 	TAILQ_INSERT_TAIL(&_dispatch_sources[hash], dk, dk_list);
 }
@@ -603,7 +607,7 @@ _dispatch_source_drain_kevent(struct kevent *ke)
 static void
 _dispatch_kevent_dispose(dispatch_kevent_t dk)
 {
-	uintptr_t key;
+	uintptr_t hash;
 
 	switch (dk->dk_kevent.filter) {
 	case DISPATCH_EVFILT_TIMER:
@@ -629,17 +633,9 @@ _dispatch_kevent_dispose(dispatch_kevent_t dk)
 		break;
 	}
 
-#ifdef HAVE_MACH
-	if (dk->dk_kevent.filter == EVFILT_MACHPORT) {
-		key = MACH_PORT_INDEX(dk->dk_kevent.ident);
-	} else {
-#endif
-		key = dk->dk_kevent.ident;
-#ifdef HAVE_MACH
-	}
-#endif
-
-	TAILQ_REMOVE(&_dispatch_sources[DSL_HASH(key)], dk, dk_list);
+	hash = _dispatch_kevent_hash(dk->dk_kevent.ident,
+				     dk->dk_kevent.filter);
+	TAILQ_REMOVE(&_dispatch_sources[hash], dk, dk_list);
 	free(dk);
 }
 
-- 
1.6.2.5





More information about the libdispatch-dev mailing list