[Spice-devel] [spice-server 09/10] Pass RedChannelClient to red_peer_handle_outgoing()
Christophe Fergeau
cfergeau at redhat.com
Tue Feb 7 10:59:57 UTC 2017
There is only one implementation of OutgoingHandler which relies
OutgoingHandler::opaque being a RedChannelClient. This commit makes this
explicit in order to get rid of the OutgoingHandler::opaque data member.
---
server/red-channel-client-private.h | 1 -
server/red-channel-client.c | 21 +++++++++++----------
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/server/red-channel-client-private.h b/server/red-channel-client-private.h
index a7167e5..08ac6ca 100644
--- a/server/red-channel-client-private.h
+++ b/server/red-channel-client-private.h
@@ -41,7 +41,6 @@ typedef struct RedChannelClientConnectivityMonitor {
} RedChannelClientConnectivityMonitor;
typedef struct OutgoingHandler {
- void *opaque;
struct iovec vec_buf[IOV_MAX];
int vec_size;
struct iovec *vec;
diff --git a/server/red-channel-client.c b/server/red-channel-client.c
index 59f8805..c92434b 100644
--- a/server/red-channel-client.c
+++ b/server/red-channel-client.c
@@ -268,7 +268,6 @@ static void red_channel_client_constructed(GObject *object)
{
RedChannelClient *self = RED_CHANNEL_CLIENT(object);
- self->priv->outgoing.opaque = self;
self->priv->outgoing.pos = 0;
self->priv->outgoing.size = 0;
@@ -1024,8 +1023,10 @@ static void red_channel_client_release_msg_buf(RedChannelClient *client,
g_return_if_reached();
}
-static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handler)
+static void red_channel_client_handle_outgoing(RedChannelClient *client)
{
+ RedsStream *stream = client->priv->stream;
+ OutgoingHandler *handler = &client->priv->outgoing;
ssize_t n;
if (!stream) {
@@ -1034,35 +1035,35 @@ static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handle
if (handler->size == 0) {
handler->vec = handler->vec_buf;
- handler->size = red_channel_client_get_out_msg_size(handler->opaque);
+ handler->size = red_channel_client_get_out_msg_size(client);
if (!handler->size) { // nothing to be sent
return;
}
}
for (;;) {
- red_channel_client_prepare_out_msg(handler->opaque, handler->vec, &handler->vec_size, handler->pos);
+ red_channel_client_prepare_out_msg(client, handler->vec, &handler->vec_size, handler->pos);
n = reds_stream_writev(stream, handler->vec, handler->vec_size);
if (n == -1) {
switch (errno) {
case EAGAIN:
- red_channel_client_on_out_block(handler->opaque);
+ red_channel_client_on_out_block(client);
return;
case EINTR:
continue;
case EPIPE:
/* FIXME: handle disconnection in caller */
- red_channel_client_disconnect(handler->opaque);
+ red_channel_client_disconnect(client);
return;
default:
/* FIXME: handle disconnection in caller */
spice_printerr("%s", strerror(errno));
- red_channel_client_disconnect(handler->opaque);
+ red_channel_client_disconnect(client);
return;
}
} else {
handler->pos += n;
- red_channel_client_on_output(handler->opaque, n);
+ red_channel_client_on_output(client, n);
if (handler->pos == handler->size) { // finished writing data
/* reset handler before calling on_msg_done, since it
* can trigger another call to red_peer_handle_outgoing (when
@@ -1070,7 +1071,7 @@ static void red_peer_handle_outgoing(RedsStream *stream, OutgoingHandler *handle
handler->vec = handler->vec_buf;
handler->pos = 0;
handler->size = 0;
- red_channel_client_on_out_msg_done(handler->opaque);
+ red_channel_client_on_out_msg_done(client);
return;
}
}
@@ -1239,7 +1240,7 @@ void red_channel_client_receive(RedChannelClient *rcc)
void red_channel_client_send(RedChannelClient *rcc)
{
g_object_ref(rcc);
- red_peer_handle_outgoing(rcc->priv->stream, &rcc->priv->outgoing);
+ red_channel_client_handle_outgoing(rcc);
g_object_unref(rcc);
}
--
2.9.3
More information about the Spice-devel
mailing list