diff options
author | Jonathon Jongsma <jjongsma@redhat.com> | 2016-04-14 16:18:29 -0500 |
---|---|---|
committer | Jonathon Jongsma <jjongsma@redhat.com> | 2016-04-15 11:14:34 -0500 |
commit | 521dd24ffbbfd9ae2864ad3f8dd21126fc60f899 (patch) | |
tree | 74964a9e469953a38f17993539e4c8773a34fdf3 | |
parent | e09598ec75ff86c533050e9671cee836c2311c62 (diff) |
dcc: Use refcounting for MonitorsConfigItem
-rw-r--r-- | server/dcc.c | 25 |
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: |