[Spice-devel] [PATCH spice-gtk 4/9] spice_msg_out[_send_internal]: Take ownership of the passed SpiceMsgOut
Hans de Goede
hdegoede at redhat.com
Wed Dec 14 06:14:04 PST 2011
All callers of spice_msg_out[_send_internal] unref the message immediately
after calling spice_msg_out[_send_internal]. This patch changes the
semantics so that spice_msg_out[_send_internal] takes ownership and it
is responsible for unref-ing the passed in SpiceMsgOut.
This is a preparation patch for changing the buffered write code
to use a queue of SpiceMsgOut-s, rather then memcpy the message contents
into an intermediate buffer.
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
gtk/channel-base.c | 4 ----
gtk/channel-display.c | 1 -
gtk/channel-inputs.c | 10 ----------
gtk/channel-main.c | 5 -----
gtk/channel-record.c | 3 ---
gtk/channel-smartcard.c | 3 ---
gtk/channel-usbredir.c | 1 -
gtk/spice-channel.c | 4 +++-
8 files changed, 3 insertions(+), 28 deletions(-)
diff --git a/gtk/channel-base.c b/gtk/channel-base.c
index c689c71..a6a2892 100644
--- a/gtk/channel-base.c
+++ b/gtk/channel-base.c
@@ -35,7 +35,6 @@ void spice_channel_handle_set_ack(SpiceChannel *channel, SpiceMsgIn *in)
c->message_ack_window = c->message_ack_count = ack->window;
c->marshallers->msgc_ack_sync(out->marshaller, &sync);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
}
/* coroutine context */
@@ -48,7 +47,6 @@ void spice_channel_handle_ping(SpiceChannel *channel, SpiceMsgIn *in)
c->marshallers->msgc_pong(pong->marshaller, ping);
spice_msg_out_send_internal(pong);
- spice_msg_out_unref(pong);
}
/* coroutine context */
@@ -130,7 +128,6 @@ void spice_channel_handle_migrate(SpiceChannel *channel, SpiceMsgIn *in)
out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MIGRATE_FLUSH_MARK);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
SPICE_CHANNEL_GET_CLASS(channel)->iterate_write(channel);
}
if (mig->flags & SPICE_MIGRATE_NEED_DATA_TRANSFER) {
@@ -148,6 +145,5 @@ void spice_channel_handle_migrate(SpiceChannel *channel, SpiceMsgIn *in)
out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MIGRATE_DATA);
spice_marshaller_add(out->marshaller, data->data, data->header.size);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
}
}
diff --git a/gtk/channel-display.c b/gtk/channel-display.c
index 923281b..120128f 100644
--- a/gtk/channel-display.c
+++ b/gtk/channel-display.c
@@ -701,7 +701,6 @@ static void spice_display_channel_up(SpiceChannel *channel)
out = spice_msg_out_new(channel, SPICE_MSGC_DISPLAY_INIT);
out->marshallers->msgc_display_init(out->marshaller, &init);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
}
#define DRAW(type) { \
diff --git a/gtk/channel-inputs.c b/gtk/channel-inputs.c
index a29c707..ef35065 100644
--- a/gtk/channel-inputs.c
+++ b/gtk/channel-inputs.c
@@ -223,7 +223,6 @@ static void send_position(SpiceInputsChannel *channel)
return;
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/* main context */
@@ -239,7 +238,6 @@ static void send_motion(SpiceInputsChannel *channel)
return;
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/* coroutine context */
@@ -273,13 +271,11 @@ static void inputs_handle_ack(SpiceChannel *channel, SpiceMsgIn *in)
msg = mouse_motion(SPICE_INPUTS_CHANNEL(channel));
if (msg) { /* if no motion, msg == NULL */
spice_msg_out_send_internal(msg);
- spice_msg_out_unref(msg);
}
msg = mouse_position(SPICE_INPUTS_CHANNEL(channel));
if (msg) {
spice_msg_out_send_internal(msg);
- spice_msg_out_unref(msg);
}
}
@@ -417,7 +413,6 @@ void spice_inputs_button_press(SpiceInputsChannel *channel, gint button,
press.buttons_state = button_state;
msg->marshallers->msgc_inputs_mouse_press(msg->marshaller, &press);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/**
@@ -465,7 +460,6 @@ void spice_inputs_button_release(SpiceInputsChannel *channel, gint button,
release.buttons_state = button_state;
msg->marshallers->msgc_inputs_mouse_release(msg->marshaller, &release);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/**
@@ -498,7 +492,6 @@ void spice_inputs_key_press(SpiceInputsChannel *channel, guint scancode)
SPICE_MSGC_INPUTS_KEY_DOWN);
msg->marshallers->msgc_inputs_key_down(msg->marshaller, &down);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/**
@@ -531,7 +524,6 @@ void spice_inputs_key_release(SpiceInputsChannel *channel, guint scancode)
SPICE_MSGC_INPUTS_KEY_UP);
msg->marshallers->msgc_inputs_key_up(msg->marshaller, &up);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/* main or coroutine context */
@@ -577,7 +569,6 @@ void spice_inputs_set_key_locks(SpiceInputsChannel *channel, guint locks)
return;
spice_msg_out_send(msg); /* main -> coroutine */
- spice_msg_out_unref(msg);
}
/* coroutine context */
@@ -591,5 +582,4 @@ static void spice_inputs_channel_up(SpiceChannel *channel)
msg = set_key_locks(SPICE_INPUTS_CHANNEL(channel), c->locks);
spice_msg_out_send_internal(msg);
- spice_msg_out_unref(msg);
}
diff --git a/gtk/channel-main.c b/gtk/channel-main.c
index b2d44b6..615cdf6 100644
--- a/gtk/channel-main.c
+++ b/gtk/channel-main.c
@@ -717,7 +717,6 @@ static void agent_send_msg_queue(SpiceMainChannel *channel)
c->agent_tokens--;
out = g_queue_pop_head(c->agent_msg_queue);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
}
}
@@ -1023,7 +1022,6 @@ static void agent_start(SpiceMainChannel *channel)
out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MAIN_AGENT_START);
out->marshallers->msgc_main_agent_start(out->marshaller, &agent_start);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
if (c->agent_connected) {
agent_announce_caps(channel);
@@ -1065,7 +1063,6 @@ static void set_mouse_mode(SpiceMainChannel *channel, uint32_t supported, uint32
out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST);
out->marshallers->msgc_main_mouse_mode_request(out->marshaller, &req);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
}
}
@@ -1082,7 +1079,6 @@ static void main_handle_init(SpiceChannel *channel, SpiceMsgIn *in)
out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MAIN_ATTACH_CHANNELS);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
set_mouse_mode(SPICE_MAIN_CHANNEL(channel), init->supported_mouse_modes,
init->current_mouse_mode);
@@ -1508,7 +1504,6 @@ static void main_handle_migrate_begin(SpiceChannel *channel, SpiceMsgIn *in)
out = spice_msg_out_new(SPICE_CHANNEL(channel), reply_type);
spice_msg_out_send(out);
- spice_msg_out_unref(out);
}
/* main context */
diff --git a/gtk/channel-record.c b/gtk/channel-record.c
index bb66c3b..4e5e893 100644
--- a/gtk/channel-record.c
+++ b/gtk/channel-record.c
@@ -288,7 +288,6 @@ static void spice_record_mode(SpiceRecordChannel *channel, uint32_t time,
msg = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_RECORD_MODE);
msg->marshallers->msgc_record_mode(msg->marshaller, &m);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/* coroutine context */
@@ -319,7 +318,6 @@ static void spice_record_start_mark(SpiceRecordChannel *channel, uint32_t time)
msg = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_RECORD_START_MARK);
msg->marshallers->msgc_record_start_mark(msg->marshaller, &m);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
}
/**
@@ -398,7 +396,6 @@ void spice_record_send_data(SpiceRecordChannel *channel, gpointer data,
msg->marshallers->msgc_record_data(msg->marshaller, &p);
spice_marshaller_add(msg->marshaller, frame, frame_size);
spice_msg_out_send(msg);
- spice_msg_out_unref(msg);
if (rc->last_frame_current == rc->frame_bytes)
rc->last_frame_current = 0;
diff --git a/gtk/channel-smartcard.c b/gtk/channel-smartcard.c
index 1df91ce..98e77eb 100644
--- a/gtk/channel-smartcard.c
+++ b/gtk/channel-smartcard.c
@@ -271,7 +271,6 @@ smartcard_message_complete_in_flight(SpiceSmartcardChannel *channel)
channel->priv->in_flight_message = g_queue_pop_head(channel->priv->message_queue);
if (channel->priv->in_flight_message != NULL) {
spice_msg_out_send(channel->priv->in_flight_message->message);
- spice_msg_out_unref(channel->priv->in_flight_message->message);
channel->priv->in_flight_message->message = NULL;
}
}
@@ -289,7 +288,6 @@ static void smartcard_message_send(SpiceSmartcardChannel *channel,
msg_type, queue ? "queued" : "now");
if (!queue) {
spice_msg_out_send(msg_out);
- spice_msg_out_unref(msg_out);
return;
}
@@ -298,7 +296,6 @@ static void smartcard_message_send(SpiceSmartcardChannel *channel,
g_return_if_fail(g_queue_is_empty(channel->priv->message_queue));
channel->priv->in_flight_message = message;
spice_msg_out_send(channel->priv->in_flight_message->message);
- spice_msg_out_unref(channel->priv->in_flight_message->message);
channel->priv->in_flight_message->message = NULL;
} else {
g_queue_push_tail(channel->priv->message_queue, message);
diff --git a/gtk/channel-usbredir.c b/gtk/channel-usbredir.c
index fce4783..06d80d5 100644
--- a/gtk/channel-usbredir.c
+++ b/gtk/channel-usbredir.c
@@ -367,7 +367,6 @@ void spice_usbredir_channel_do_write(SpiceUsbredirChannel *channel)
usbredirhost_write_guest_data(priv->host);
spice_msg_out_send(priv->msg_out);
- spice_msg_out_unref(priv->msg_out);
priv->msg_out = NULL;
}
diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c
index 7a57630..8ea5a3b 100644
--- a/gtk/spice-channel.c
+++ b/gtk/spice-channel.c
@@ -545,6 +545,8 @@ void spice_msg_out_send(SpiceMsgOut *out)
/* TODO: we currently flush/wakeup immediately all buffered messages */
spice_channel_wakeup(out->channel);
+
+ spice_msg_out_unref(out);
}
/* coroutine context */
@@ -556,6 +558,7 @@ void spice_msg_out_send_internal(SpiceMsgOut *out)
out->header->size =
spice_marshaller_get_total_size(out->marshaller) - sizeof(SpiceDataHeader);
spice_channel_send_msg(out->channel, out, FALSE);
+ spice_msg_out_unref(out);
}
/* ---------------------------------------------------------------- */
@@ -1657,7 +1660,6 @@ void spice_channel_recv_msg(SpiceChannel *channel,
if (!c->message_ack_count) {
SpiceMsgOut *out = spice_msg_out_new(channel, SPICE_MSGC_ACK);
spice_msg_out_send_internal(out);
- spice_msg_out_unref(out);
c->message_ack_count = c->message_ack_window;
}
}
--
1.7.7.4
More information about the Spice-devel
mailing list