[libdispatch-changes] [70] trunk/src/source.c

source_changes at macosforge.org source_changes at macosforge.org
Wed Oct 28 10:47:08 PDT 2009


Revision: 70
          http://trac.macosforge.org/projects/libdispatch/changeset/70
Author:   robert at 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 at gnu.org>

Modified Paths:
--------------
    trunk/src/source.c

Modified: trunk/src/source.c
===================================================================
--- 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);
 }
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/libdispatch-changes/attachments/20091028/49be16c6/attachment.html>


More information about the libdispatch-changes mailing list