mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-09 05:51:00 +00:00
server/dispatcher: add dispatcher_register_async_done_callback
This commit is contained in:
parent
fff04e867c
commit
ca5776f40e
@ -126,6 +126,9 @@ static int dispatcher_handle_single_read(Dispatcher *dispatcher)
|
||||
red_printf("error writing ack for message %d\n", type);
|
||||
/* TODO: close socketpair? */
|
||||
}
|
||||
} else if (msg->ack == DISPATCHER_ASYNC && dispatcher->handle_async_done) {
|
||||
dispatcher->handle_async_done(dispatcher->opaque, type,
|
||||
(void *)payload);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -174,9 +177,17 @@ unlock:
|
||||
pthread_mutex_unlock(&dispatcher->lock);
|
||||
}
|
||||
|
||||
void dispatcher_register_async_done_callback(
|
||||
Dispatcher *dispatcher,
|
||||
dispatcher_handle_async_done handler)
|
||||
{
|
||||
assert(dispatcher->handle_async_done == NULL);
|
||||
dispatcher->handle_async_done = handler;
|
||||
}
|
||||
|
||||
void dispatcher_register_handler(Dispatcher *dispatcher, uint32_t message_type,
|
||||
dispatcher_handle_message handler, size_t size,
|
||||
int ack)
|
||||
dispatcher_handle_message handler,
|
||||
size_t size, int ack)
|
||||
{
|
||||
DispatcherMessage *msg;
|
||||
|
||||
|
||||
@ -8,6 +8,11 @@ typedef struct Dispatcher Dispatcher;
|
||||
typedef void (*dispatcher_handle_message)(void *opaque,
|
||||
void *payload);
|
||||
|
||||
typedef void (*dispatcher_handle_async_done)(void *opaque,
|
||||
uint32_t message_type,
|
||||
void *payload);
|
||||
|
||||
|
||||
typedef struct DispatcherMessage {
|
||||
size_t size;
|
||||
int ack;
|
||||
@ -26,6 +31,7 @@ struct Dispatcher {
|
||||
void *payload; /* allocated as max of message sizes */
|
||||
size_t payload_size; /* used to track realloc calls */
|
||||
void *opaque;
|
||||
dispatcher_handle_async_done handle_async_done;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -68,6 +74,16 @@ void dispatcher_register_handler(Dispatcher *dispatcher, uint32_t message_type,
|
||||
dispatcher_handle_message handler, size_t size,
|
||||
int ack);
|
||||
|
||||
/*
|
||||
* dispatcher_register_async_done_callback
|
||||
* @dispatcher: dispatcher
|
||||
* @handler: callback on the receiver side called *after* the
|
||||
* message callback in case ack == DISPATCHER_ASYNC.
|
||||
*/
|
||||
void dispatcher_register_async_done_callback(
|
||||
Dispatcher *dispatcher,
|
||||
dispatcher_handle_async_done handler);
|
||||
|
||||
/*
|
||||
* dispatcher_handle_recv_read
|
||||
* @dispatcher: Dispatcher instance
|
||||
|
||||
Loading…
Reference in New Issue
Block a user