[libdispatch-dev] [PATCH 17/17] remove last mention of struct kevent from "generic" code
Paolo Bonzini
bonzini at gnu.org
Sun Oct 18 08:04:17 PDT 2009
Here is the final step. I had to extract the "prototype" kevent
into a separate static struct, and put an opaque (void *) cookie
in the dispatch_source_type struct.
---
src/internal.h | 1 -
src/source_internal.h | 2 +-
src/source_kevent.c | 114 +++++++++++++++++++++++++++++--------------------
3 files changed, 69 insertions(+), 48 deletions(-)
diff --git a/src/internal.h b/src/internal.h
index be0336c..bd3ef43 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -86,7 +86,6 @@
#ifdef HAVE_MALLOC_MALLOC_H
#include <malloc/malloc.h>
#endif
-#include <sys/event.h>
#include <sys/mount.h>
#include <sys/queue.h>
#include <sys/stat.h>
diff --git a/src/source_internal.h b/src/source_internal.h
index 3711649..4c53efc 100644
--- a/src/source_internal.h
+++ b/src/source_internal.h
@@ -110,7 +110,7 @@ void _dispatch_kevent_release(dispatch_source_t ds);
void _dispatch_timer_list_update(dispatch_source_t ds);
struct dispatch_source_type_s {
- struct kevent ke;
+ void *opaque;
uint64_t mask;
bool (*init) (dispatch_source_t ds,
dispatch_source_type_t type,
diff --git a/src/source_kevent.c b/src/source_kevent.c
index 6554040..70548c2 100644
--- a/src/source_kevent.c
+++ b/src/source_kevent.c
@@ -571,10 +571,10 @@ static bool dispatch_source_type_kevent_init (dispatch_source_t ds,
unsigned long mask,
dispatch_queue_t q)
{
- const struct kevent *proto_kev = &type->ke;
+ const struct kevent *proto_kev = type->opaque;
dispatch_kevent_t dk = NULL;
- switch (type->ke.filter) {
+ switch (proto_kev->filter) {
case EVFILT_SIGNAL:
if (handle >= NSIG) {
return false;
@@ -632,35 +632,43 @@ static bool dispatch_source_type_timer_init (dispatch_source_t ds,
return true;
}
+static const struct kevent _dispatch_source_type_timer_ke = {
+ .filter = DISPATCH_EVFILT_TIMER,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_timer = {
- .ke = {
- .filter = DISPATCH_EVFILT_TIMER,
- },
+ .opaque = (void *) &_dispatch_source_type_timer_ke,
.mask = DISPATCH_TIMER_INTERVAL|DISPATCH_TIMER_ONESHOT|DISPATCH_TIMER_ABSOLUTE|DISPATCH_TIMER_WALL_CLOCK,
.init = dispatch_source_type_timer_init
};
+static const struct kevent _dispatch_source_type_read_ke = {
+ .filter = EVFILT_READ,
+ .flags = EV_DISPATCH,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_read = {
- .ke = {
- .filter = EVFILT_READ,
- .flags = EV_DISPATCH,
- },
+ .opaque = (void *) &_dispatch_source_type_read_ke,
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_write_ke = {
+ .filter = EVFILT_WRITE,
+ .flags = EV_DISPATCH,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_write = {
- .ke = {
- .filter = EVFILT_WRITE,
- .flags = EV_DISPATCH,
- },
+ .opaque = (void *) &_dispatch_source_type_write_ke,
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_proc_ke = {
+ .filter = EVFILT_PROC,
+ .flags = EV_CLEAR,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_proc = {
- .ke = {
- .filter = EVFILT_PROC,
- .flags = EV_CLEAR,
- },
+ .opaque = (void *) &_dispatch_source_type_proc_ke,
.mask = NOTE_EXIT|NOTE_FORK|NOTE_EXEC
#if HAVE_DECL_NOTE_SIGNAL
|NOTE_SIGNAL
@@ -672,18 +680,22 @@ const struct dispatch_source_type_s _dispatch_source_type_proc = {
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_signal_ke = {
+ .filter = EVFILT_SIGNAL,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_signal = {
- .ke = {
- .filter = EVFILT_SIGNAL,
- },
+ .opaque = (void *) &_dispatch_source_type_signal_ke,
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_vnode_ke = {
+ .filter = EVFILT_VNODE,
+ .flags = EV_CLEAR,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_vnode = {
- .ke = {
- .filter = EVFILT_VNODE,
- .flags = EV_CLEAR,
- },
+ .opaque = (void *) &_dispatch_source_type_vnode_ke,
.mask = NOTE_DELETE|NOTE_WRITE|NOTE_EXTEND|NOTE_ATTRIB|NOTE_LINK|
NOTE_RENAME|NOTE_REVOKE
#if HAVE_DECL_NOTE_NONE
@@ -693,11 +705,13 @@ const struct dispatch_source_type_s _dispatch_source_type_vnode = {
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_vfs_ke = {
+ .filter = EVFILT_FS,
+ .flags = EV_CLEAR,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_vfs = {
- .ke = {
- .filter = EVFILT_FS,
- .flags = EV_CLEAR,
- },
+ .opaque = (void *) &_dispatch_source_type_vfs_ke,
.mask = VQ_NOTRESP|VQ_NEEDAUTH|VQ_LOWDISK|VQ_MOUNT|VQ_UNMOUNT|VQ_DEAD|
VQ_ASSIST|VQ_NOTRESPLOCK
#if HAVE_DECL_VQ_UPDATE
@@ -727,12 +741,14 @@ static bool dispatch_source_type_mach_send_init (dispatch_source_t ds,
return true;
}
+static const struct kevent _dispatch_source_type_mach_send_ke = {
+ .filter = EVFILT_MACHPORT,
+ .flags = EV_DISPATCH,
+ .fflags = DISPATCH_MACHPORT_DEAD,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_mach_send = {
- .ke = {
- .filter = EVFILT_MACHPORT,
- .flags = EV_DISPATCH,
- .fflags = DISPATCH_MACHPORT_DEAD,
- },
+ .opaque = (void *) &_dispatch_source_type_mach_send_ke,
.mask = DISPATCH_MACH_SEND_DEAD,
.init = dispatch_source_type_mach_send_init
};
@@ -750,29 +766,35 @@ static bool dispatch_source_type_mach_recv_init (dispatch_source_t ds,
return true;
}
+static const struct kevent _dispatch_source_type_mach_recv_ke = {
+ .filter = EVFILT_MACHPORT,
+ .flags = EV_DISPATCH,
+ .fflags = DISPATCH_MACHPORT_RECV,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_mach_recv = {
- .ke = {
- .filter = EVFILT_MACHPORT,
- .flags = EV_DISPATCH,
- .fflags = DISPATCH_MACHPORT_RECV,
- },
+ .opaque = (void *) &_dispatch_source_type_mach_recv_ke,
.init = dispatch_source_type_mach_recv_init
};
#endif
+static const struct kevent _dispatch_source_type_data_add_ke = {
+ .filter = DISPATCH_EVFILT_CUSTOM_ADD,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_data_add = {
- .ke = {
- .filter = DISPATCH_EVFILT_CUSTOM_ADD,
- },
+ .opaque = (void *) &_dispatch_source_type_data_add_ke,
.init = dispatch_source_type_kevent_init
};
+static const struct kevent _dispatch_source_type_data_or_ke = {
+ .filter = DISPATCH_EVFILT_CUSTOM_OR,
+ .flags = EV_CLEAR,
+ .fflags = ~0,
+};
+
const struct dispatch_source_type_s _dispatch_source_type_data_or = {
- .ke = {
- .filter = DISPATCH_EVFILT_CUSTOM_OR,
- .flags = EV_CLEAR,
- .fflags = ~0,
- },
+ .opaque = (void *) &_dispatch_source_type_data_or_ke,
.init = dispatch_source_type_kevent_init
};
--
1.6.2.5
More information about the libdispatch-dev
mailing list