[Spice-devel] [PATCH 17/23] simplify main_channel_release_pipe_item

Frediano Ziglio fziglio at redhat.com
Mon May 16 13:31:27 UTC 2016


Reuse RedPipeItem facilities.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/main-channel.c | 35 +++++++++++++++++------------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/server/main-channel.c b/server/main-channel.c
index 98ce660..433b46c 100644
--- a/server/main-channel.c
+++ b/server/main-channel.c
@@ -250,13 +250,20 @@ static RedPipeItem *main_agent_tokens_item_new(RedChannelClient *rcc, uint32_t n
     return &item->base;
 }
 
+static void main_agent_data_item_free(RedAgentDataPipeItem *item)
+{
+    item->free_data(item->data, item->opaque);
+    free(item);
+}
+
 static RedPipeItem *main_agent_data_item_new(RedChannelClient *rcc, uint8_t* data, size_t len,
                                              spice_marshaller_item_free_func free_data,
                                              void *opaque)
 {
     RedAgentDataPipeItem *item = spice_malloc(sizeof(RedAgentDataPipeItem));
 
-    red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_MAIN_AGENT_DATA);
+    red_pipe_item_init_full(&item->base, RED_PIPE_ITEM_TYPE_MAIN_AGENT_DATA,
+                            (GDestroyNotify)main_agent_data_item_free);
     item->data = data;
     item->len = len;
     item->free_data = free_data;
@@ -302,12 +309,19 @@ static RedPipeItem *main_uuid_item_new(MainChannelClient *mcc, const uint8_t uui
     return &item->base;
 }
 
+static void main_notify_item_free(RedNotifyPipeItem *data)
+{
+    free(data->msg);
+    free(data);
+}
+
 static RedPipeItem *main_notify_item_new(RedChannelClient *rcc, void *data, int num)
 {
     RedNotifyPipeItem *item = spice_malloc(sizeof(RedNotifyPipeItem));
     const char *msg = data;
 
-    red_pipe_item_init(&item->base, RED_PIPE_ITEM_TYPE_MAIN_NOTIFY);
+    red_pipe_item_init_full(&item->base, RED_PIPE_ITEM_TYPE_MAIN_NOTIFY,
+                            (GDestroyNotify)main_notify_item_free);
     item->msg = spice_strdup(msg);
     return &item->base;
 }
@@ -786,22 +800,7 @@ static void main_channel_send_item(RedChannelClient *rcc, RedPipeItem *base)
 static void main_channel_release_pipe_item(RedChannelClient *rcc,
     RedPipeItem *base, int item_pushed)
 {
-    switch (base->type) {
-        case RED_PIPE_ITEM_TYPE_MAIN_AGENT_DATA: {
-                RedAgentDataPipeItem *data = (RedAgentDataPipeItem *)base;
-
-                data->free_data(data->data, data->opaque);
-                break;
-        }
-        case RED_PIPE_ITEM_TYPE_MAIN_NOTIFY: {
-                RedNotifyPipeItem *data = (RedNotifyPipeItem *)base;
-                free(data->msg);
-                break;
-        }
-        default:
-            break;
-    }
-    free(base);
+    red_pipe_item_unref(base);
 }
 
 static void main_channel_client_handle_migrate_connected(MainChannelClient *mcc,
-- 
2.7.4



More information about the Spice-devel mailing list