[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