[Spice-devel] [PATCH spice-gtk 2/4] Compatibility with the improved lz4 protocol

Snir Sheriber ssheribe at redhat.com
Sun May 29 14:30:10 UTC 2016


---
 src/channel-usbredir.c | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c
index 2a7282c..f09b0bf 100644
--- a/src/channel-usbredir.c
+++ b/src/channel-usbredir.c
@@ -642,20 +642,15 @@ static void usbredir_free_write_cb_data(uint8_t *data, void *user_data)
 }
 
 #ifdef USE_LZ4
-static void usbredir_free_write_cb_compressed_data(uint8_t *data, void *user_data)
-{
-    SpiceUsbredirChannel *channel = user_data;
-    SpiceUsbredirChannelPrivate *priv = channel->priv;
-
-    usbredirhost_free_write_buffer(priv->host,
-                                   (uint8_t*)SPICE_CONTAINEROF(data, SpiceMsgCompressedData, compressed_data));
-}
-
 static int try_write_compress_LZ4(SpiceUsbredirChannel *channel, uint8_t *data, int count) {
     SpiceChannelPrivate *c;
     SpiceMsgOut *msg_out_compressed;
     int bound, compressed_data_count;
-    SpiceMsgCompressedData *compressed_data_msg;
+    uint8_t *compressed_buf;
+    SpiceMsgCompressedData compressed_data_msg = {
+            .type = SPICE_DATA_COMPRESSION_TYPE_LZ4,
+            .uncompressed_size = count
+        };
 
     c = SPICE_CHANNEL(channel)->priv;
     if (g_socket_get_family(c->sock) == G_SOCKET_FAMILY_UNIX) {
@@ -676,29 +671,28 @@ static int try_write_compress_LZ4(SpiceUsbredirChannel *channel, uint8_t *data,
         /* Invalid bound - data will not be compressed */
         return FALSE;
     }
-    compressed_data_msg = (SpiceMsgCompressedData*)spice_malloc(sizeof(SpiceMsgCompressedData) + bound);
-    compressed_data_msg->uncompressed_size = count;
-    compressed_data_msg->type = SPICE_DATA_COMPRESSION_TYPE_LZ4;
+
+    compressed_buf = (uint8_t*)spice_malloc(bound);
     compressed_data_count = LZ4_compress_default((char*)data,
-                                                 (char*)compressed_data_msg->compressed_data,
+                                                 (char*)compressed_buf,
                                                  count,
                                                  bound);
     if (compressed_data_count > 0) {
-        compressed_data_msg->compressed_size = compressed_data_count;
+        compressed_data_msg.compressed_data = compressed_buf;
         msg_out_compressed = spice_msg_out_new(SPICE_CHANNEL(channel),
                                                SPICE_MSGC_SPICEVMC_COMPRESSED_DATA);
         msg_out_compressed->marshallers->msg_SpiceMsgCompressedData(msg_out_compressed->marshaller,
-                                                                    compressed_data_msg);
+                                                                    &compressed_data_msg);
         spice_marshaller_add_ref_full(msg_out_compressed->marshaller,
-                                      compressed_data_msg->compressed_data,
+                                      compressed_data_msg.compressed_data,
                                       compressed_data_count,
-                                      usbredir_free_write_cb_compressed_data,
+                                      usbredir_free_write_cb_data,
                                       channel);
         spice_msg_out_send(msg_out_compressed);
         return TRUE;
     }
     /* if not - free & fallback to sending the message uncompressed */
-    free(compressed_data_msg);
+    free(compressed_buf);
     return FALSE;
 }
 #endif
-- 
2.5.5



More information about the Spice-devel mailing list