summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2011-11-07 13:27:54 +0200
committerAlon Levy <alevy@redhat.com>2011-11-08 14:59:51 +0200
commitfff04e867c02eb5c3582f17810c1a092ce240fc6 (patch)
tree2a3e8037e6505472037690222d1f072fcbc788ce /server
parent776bdd6c95715dcd8e609dc3ff647d0ad73fd339 (diff)
downloadspice-fff04e867c02eb5c3582f17810c1a092ce240fc6.tar.gz
spice-fff04e867c02eb5c3582f17810c1a092ce240fc6.tar.xz
spice-fff04e867c02eb5c3582f17810c1a092ce240fc6.zip
introduce DISPATCHER_{NONE,ACK,ASYNC}
Diffstat (limited to 'server')
-rw-r--r--server/dispatcher.c12
-rw-r--r--server/dispatcher.h13
2 files changed, 18 insertions, 7 deletions
diff --git a/server/dispatcher.c b/server/dispatcher.c
index 1cd9e43a..81abbdf3 100644
--- a/server/dispatcher.c
+++ b/server/dispatcher.c
@@ -120,10 +120,12 @@ static int dispatcher_handle_single_read(Dispatcher *dispatcher)
} else {
red_printf("error: no handler for message type %d\n", type);
}
- if (msg->ack && write_safe(dispatcher->recv_fd,
- &ack, sizeof(ack)) == -1) {
- red_printf("error writing ack for message %d\n", type);
- /* TODO: close socketpair? */
+ if (msg->ack == DISPATCHER_ACK) {
+ if (write_safe(dispatcher->recv_fd,
+ &ack, sizeof(ack)) == -1) {
+ red_printf("error writing ack for message %d\n", type);
+ /* TODO: close socketpair? */
+ }
}
return 1;
}
@@ -159,7 +161,7 @@ void dispatcher_send_message(Dispatcher *dispatcher, uint32_t message_type,
message_type);
goto unlock;
}
- if (msg->ack) {
+ if (msg->ack == DISPATCHER_ACK) {
if (read_safe(send_fd, &ack, sizeof(ack), 1) == -1) {
red_printf("error: failed to read ack");
} else if (ack != ACK) {
diff --git a/server/dispatcher.h b/server/dispatcher.h
index 04e6b467..95b6bfc6 100644
--- a/server/dispatcher.h
+++ b/server/dispatcher.h
@@ -45,13 +45,22 @@ void dispatcher_send_message(Dispatcher *dispatcher, uint32_t message_type,
void dispatcher_init(Dispatcher *dispatcher, size_t max_message_type,
void *opaque);
+enum {
+ DISPATCHER_NONE = 0,
+ DISPATCHER_ACK,
+ DISPATCHER_ASYNC
+};
+
/*
* dispatcher_register_handler
- * @dispatcher: dispatcher
+ * @dispatcher: dispatcher
* @messsage_type: message type
* @handler: message handler
* @size: message size. Each type has a fixed associated size.
- * @ack: send an ack. This is per message type - you can't send the
+ * @ack: One of DISPATCHER_NONE, DISPATCHER_ACK, DISPATCHER_ASYNC.
+ * DISPATCHER_NONE - only send the message
+ * DISPATCHER_ACK - send an ack after the message
+ * DISPATCHER_ASYNC - call send an ack. This is per message type - you can't send the
* same message type with and without. Register two different
* messages if that is what you want.
*/