summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2016-04-14 16:18:29 -0500
committerJonathon Jongsma <jjongsma@redhat.com>2016-04-15 11:14:34 -0500
commit521dd24ffbbfd9ae2864ad3f8dd21126fc60f899 (patch)
tree74964a9e469953a38f17993539e4c8773a34fdf3
parente09598ec75ff86c533050e9671cee836c2311c62 (diff)
dcc: Use refcounting for MonitorsConfigItem
-rw-r--r--server/dcc.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/server/dcc.c b/server/dcc.c
index daf31804..91c3f82c 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -510,6 +510,12 @@ void dcc_stream_agent_clip(DisplayChannelClient* dcc, StreamAgent *agent)
red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), (PipeItem *)item);
}
+static void monitors_config_item_free(MonitorsConfigItem *item)
+{
+ monitors_config_unref(item->monitors_config);
+ free(item);
+}
+
static MonitorsConfigItem *monitors_config_item_new(RedChannel* channel,
MonitorsConfig *monitors_config)
{
@@ -518,7 +524,8 @@ static MonitorsConfigItem *monitors_config_item_new(RedChannel* channel,
mci = (MonitorsConfigItem *)spice_malloc(sizeof(*mci));
mci->monitors_config = monitors_config;
- pipe_item_init(&mci->pipe_item, PIPE_ITEM_TYPE_MONITORS_CONFIG);
+ pipe_item_init_full(&mci->pipe_item, PIPE_ITEM_TYPE_MONITORS_CONFIG,
+ (GDestroyNotify)monitors_config_item_free);
return mci;
}
@@ -1602,6 +1609,7 @@ static void release_item_after_push(DisplayChannelClient *dcc, PipeItem *item)
case PIPE_ITEM_TYPE_DRAW:
case PIPE_ITEM_TYPE_IMAGE:
case PIPE_ITEM_TYPE_STREAM_CLIP:
+ case PIPE_ITEM_TYPE_MONITORS_CONFIG:
pipe_item_unref(item);
break;
case PIPE_ITEM_TYPE_UPGRADE:
@@ -1612,13 +1620,6 @@ static void release_item_after_push(DisplayChannelClient *dcc, PipeItem *item)
case PIPE_ITEM_TYPE_VERB:
free(item);
break;
- case PIPE_ITEM_TYPE_MONITORS_CONFIG: {
- MonitorsConfigItem *monconf_item = SPICE_CONTAINEROF(item,
- MonitorsConfigItem, pipe_item);
- monitors_config_unref(monconf_item->monitors_config);
- free(item);
- break;
- }
default:
spice_critical("invalid item type");
}
@@ -1653,6 +1654,7 @@ static void release_item_before_push(DisplayChannelClient *dcc, PipeItem *item)
upgrade_item_unref(display, (UpgradeItem *)item);
break;
case PIPE_ITEM_TYPE_IMAGE:
+ case PIPE_ITEM_TYPE_MONITORS_CONFIG:
pipe_item_unref(item);
break;
case PIPE_ITEM_TYPE_CREATE_SURFACE: {
@@ -1667,13 +1669,6 @@ static void release_item_before_push(DisplayChannelClient *dcc, PipeItem *item)
free(surface_destroy);
break;
}
- case PIPE_ITEM_TYPE_MONITORS_CONFIG: {
- MonitorsConfigItem *monconf_item = SPICE_CONTAINEROF(item,
- MonitorsConfigItem, pipe_item);
- monitors_config_unref(monconf_item->monitors_config);
- free(item);
- break;
- }
case PIPE_ITEM_TYPE_INVAL_ONE:
case PIPE_ITEM_TYPE_VERB:
case PIPE_ITEM_TYPE_MIGRATE_DATA: