[Spice-devel] [PATCH 09/20] dcc: Use refcounting for MonitorsConfigItem

Frediano Ziglio fziglio at redhat.com
Fri Apr 15 10:07:14 UTC 2016


> 
> ---
>  server/dcc.c | 25 ++++++++++---------------
>  1 file changed, 10 insertions(+), 15 deletions(-)
> 
> diff --git a/server/dcc.c b/server/dcc.c
> index b58a86a..1cd9f1a 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;
>  }
>  
> @@ -1591,6 +1598,7 @@ static void
> release_item_after_push(DisplayChannelClient *dcc, PipeItem *item)
>      case PIPE_ITEM_TYPE_IMAGE:
>      case PIPE_ITEM_TYPE_STREAM_CLIP:
>      case PIPE_ITEM_TYPE_UPGRADE:
> +    case PIPE_ITEM_TYPE_MONITORS_CONFIG:
>          pipe_item_unref(item);
>          break;
>      case PIPE_ITEM_TYPE_GL_SCANOUT:
> @@ -1598,13 +1606,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");
>      }
> @@ -1637,6 +1638,7 @@ static void
> release_item_before_push(DisplayChannelClient *dcc, PipeItem *item)
>      case PIPE_ITEM_TYPE_STREAM_CLIP:
>      case PIPE_ITEM_TYPE_UPGRADE:
>      case PIPE_ITEM_TYPE_IMAGE:
> +    case PIPE_ITEM_TYPE_MONITORS_CONFIG:
>          pipe_item_unref(item);
>          break;
>      case PIPE_ITEM_TYPE_CREATE_SURFACE: {
> @@ -1651,13 +1653,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:

Acked-by: Frediano Ziglio <fziglio at redhat.com>

Frediano


More information about the Spice-devel mailing list