Revision
70
Author
robert@fledge.watson.org
Date
2009-10-28 10:47:06 -0700 (Wed, 28 Oct 2009)

Log Message

Abstract out _dispatch_kevent_hash() to reduce the proliferation of
HAVE_MACH.

Submitted by:	Paolo Bonzini <bonzini@gnu.org>

Modified Paths

Diff

Modified: trunk/src/source.c (69 => 70)


--- trunk/src/source.c	2009-10-28 14:46:22 UTC (rev 69)
+++ trunk/src/source.c	2009-10-28 17:47:06 UTC (rev 70)
@@ -142,14 +142,22 @@
 
 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 @@
 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 @@
 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 @@
 		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);
 }