server: Add an async_data_t structure to store parameters for async I/O requests.
diff --git a/server/async.c b/server/async.c
index cb4675c..b88f8f5 100644
--- a/server/async.c
+++ b/server/async.c
@@ -38,9 +38,7 @@
struct thread *thread; /* owning thread */
struct list queue_entry; /* entry in file descriptor queue */
struct timeout_user *timeout;
- void *apc; /* apc function to call when alerted */
- void *user; /* user-private argument for apc */
- void *sb; /* pointer to I/O status block in client addr space */
+ async_data_t data; /* data for async I/O call */
};
static void async_dump( struct object *obj, int verbose );
@@ -86,9 +84,9 @@
memset( &data, 0, sizeof(data) );
data.type = APC_ASYNC_IO;
- data.async_io.func = async->apc;
- data.async_io.user = async->user;
- data.async_io.sb = async->sb;
+ data.async_io.func = async->data.callback;
+ data.async_io.user = async->data.arg;
+ data.async_io.sb = async->data.iosb;
data.async_io.status = status;
thread_queue_apc( async->thread, &async->obj, &data );
@@ -109,16 +107,14 @@
/* create an async on a given queue of a fd */
struct async *create_async( struct thread *thread, const struct timeval *timeout,
- struct list *queue, void *io_apc, void *io_user, void *io_sb )
+ struct list *queue, const async_data_t *data )
{
struct async *async = alloc_object( &async_ops );
if (!async) return NULL;
async->thread = (struct thread *)grab_object( thread );
- async->apc = io_apc;
- async->user = io_user;
- async->sb = io_sb;
+ async->data = *data;
list_add_tail( queue, &async->queue_entry );