--- server/spicevmc.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/spicevmc.c b/server/spicevmc.c index d6a6ac8..521a540 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(m, i->buf, i->buf_used, + marshaller_free_pipe_item, item); } static void spicevmc_red_channel_send_migrate_data(RedChannelClient *rcc, -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel