server: Add a generic apc_call structure to make it easier to extend, and more type-safe.
diff --git a/server/trace.c b/server/trace.c
index 5018423..fcd24e6 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -43,6 +43,8 @@
static const void *cur_data;
static data_size_t cur_size;
+static const char *get_status_name( unsigned int status );
+
/* utility functions */
inline static void remove_data( data_size_t size )
@@ -96,6 +98,34 @@
fprintf( stderr, "',%04x}", info->attr );
}
+static void dump_apc_call( const apc_call_t *call )
+{
+ fputc( '{', stderr );
+ switch(call->type)
+ {
+ case APC_NONE:
+ fprintf( stderr, "APC_NONE" );
+ break;
+ case APC_USER:
+ fprintf( stderr, "APC_USER,args={%lx,%lx,%lx}",
+ call->user.args[0], call->user.args[1], call->user.args[2] );
+ break;
+ case APC_TIMER:
+ fprintf( stderr, "APC_TIMER,time=" );
+ dump_abs_time( &call->timer.time );
+ fprintf( stderr, ",arg=%p", call->timer.arg );
+ break;
+ case APC_ASYNC_IO:
+ fprintf( stderr, "APC_ASYNC_IO,user=%p,sb=%p,status=%s",
+ call->async_io.user, call->async_io.sb, get_status_name(call->async_io.status) );
+ break;
+ default:
+ fprintf( stderr, "type=%u", call->type );
+ break;
+ }
+ fputc( '}', stderr );
+}
+
static void dump_context( const CONTEXT *context )
{
#ifdef __i386__
@@ -845,11 +875,8 @@
static void dump_queue_apc_request( const struct queue_apc_request *req )
{
fprintf( stderr, " handle=%p,", req->handle );
- fprintf( stderr, " user=%d,", req->user );
- fprintf( stderr, " func=%p,", req->func );
- fprintf( stderr, " arg1=%p,", req->arg1 );
- fprintf( stderr, " arg2=%p,", req->arg2 );
- fprintf( stderr, " arg3=%p", req->arg3 );
+ fprintf( stderr, " call=" );
+ dump_apc_call( &req->call );
}
static void dump_get_apc_request( const struct get_apc_request *req )
@@ -861,11 +888,8 @@
static void dump_get_apc_reply( const struct get_apc_reply *req )
{
fprintf( stderr, " handle=%p,", req->handle );
- fprintf( stderr, " func=%p,", req->func );
- fprintf( stderr, " type=%d,", req->type );
- fprintf( stderr, " arg1=%p,", req->arg1 );
- fprintf( stderr, " arg2=%p,", req->arg2 );
- fprintf( stderr, " arg3=%p", req->arg3 );
+ fprintf( stderr, " call=" );
+ dump_apc_call( &req->call );
}
static void dump_close_handle_request( const struct close_handle_request *req )