[Spice-devel] [PATCH v3 6/9] Spicevmc: don't pass pipe item to init_send_data()

Jonathon Jongsma jjongsma at redhat.com
Mon Dec 19 21:05:29 UTC 2016


---
 server/spicevmc.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/server/spicevmc.c b/server/spicevmc.c
index a85c80a..32793bd 100644
--- a/server/spicevmc.c
+++ b/server/spicevmc.c
@@ -627,6 +627,12 @@ static void spicevmc_red_channel_release_msg_rcv_buf(RedChannelClient *rcc,
     }
 }
 
+static void marshaller_free_pipe_item(uint8_t *data, void *opaque)
+{
+    RedPipeItem *item = opaque;
+    red_pipe_item_unref(item);
+}
+
 static void spicevmc_red_channel_send_data(RedChannelClient *rcc,
                                            SpiceMarshaller *m,
                                            RedPipeItem *item)
@@ -635,17 +641,19 @@ static void spicevmc_red_channel_send_data(RedChannelClient *rcc,
 
     /* for compatibility send using not compressed data message */
     if (i->type == SPICE_DATA_COMPRESSION_TYPE_NONE) {
-        red_channel_client_init_send_data(rcc, SPICE_MSG_SPICEVMC_DATA, item);
+        red_channel_client_init_send_data(rcc, SPICE_MSG_SPICEVMC_DATA, NULL);
     } else {
         /* send as compressed */
-        red_channel_client_init_send_data(rcc, SPICE_MSG_SPICEVMC_COMPRESSED_DATA, item);
+        red_channel_client_init_send_data(rcc, SPICE_MSG_SPICEVMC_COMPRESSED_DATA, NULL);
         SpiceMsgCompressedData compressed_msg = {
             .type = i->type,
             .uncompressed_size = i->uncompressed_data_size
         };
         spice_marshall_SpiceMsgCompressedData(m, &compressed_msg);
     }
-    spice_marshaller_add_by_ref(m, i->buf, i->buf_used);
+    red_pipe_item_ref(item);
+    spice_marshaller_add_by_ref_full(m, i->buf, i->buf_used,
+                                     marshaller_free_pipe_item, item);
 }
 
 static void spicevmc_red_channel_send_migrate_data(RedChannelClient *rcc,
-- 
2.7.4



More information about the Spice-devel mailing list