On Wed, Nov 18, 2015 at 5:17 PM, Frediano Ziglio <[email protected]> wrote:
> From: Marc-André Lureau <[email protected]>
>
> ---
>  server/dcc-encoders.c    | 17 +++++++++++++++++
>  server/dcc-encoders.h    |  2 ++
>  server/display-channel.c | 12 ++++++++++++
>  server/display-channel.h |  1 +
>  server/red_worker.c      | 27 +--------------------------
>  5 files changed, 33 insertions(+), 26 deletions(-)
>
> diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
> index 305d17e..9104405 100644
> --- a/server/dcc-encoders.c
> +++ b/server/dcc-encoders.c
> @@ -472,3 +472,20 @@ void dcc_free_glz_drawable_instance(DisplayChannelClient 
> *dcc,
>          free(glz_drawable);
>      }
>  }
> +
> +void dcc_free_glz_drawables_to_free(DisplayChannelClient* dcc)
> +{
> +    RingItem *ring_link;
> +
> +    if (!dcc->glz_dict) {
> +        return;
> +    }
> +    pthread_mutex_lock(&dcc->glz_drawables_inst_to_free_lock);
> +    while ((ring_link = ring_get_head(&dcc->glz_drawables_inst_to_free))) {
> +        GlzDrawableInstanceItem *drawable_instance = 
> SPICE_CONTAINEROF(ring_link,
> +                                                                 
> GlzDrawableInstanceItem,
> +                                                                 free_link);

Could be better indented.

> +        dcc_free_glz_drawable_instance(dcc, drawable_instance);
> +    }
> +    pthread_mutex_unlock(&dcc->glz_drawables_inst_to_free_lock);
> +}
> diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
> index c973502..4dc50b1 100644
> --- a/server/dcc-encoders.h
> +++ b/server/dcc-encoders.h
> @@ -38,6 +38,8 @@ typedef struct GlzDrawableInstanceItem 
> GlzDrawableInstanceItem;
>  void             dcc_encoders_init                           
> (DisplayChannelClient *dcc);
>  void             dcc_free_glz_drawable_instance              
> (DisplayChannelClient *dcc,
>                                                                
> GlzDrawableInstanceItem *item);
> +void             dcc_free_glz_drawables_to_free              
> (DisplayChannelClient* dcc);
> +
>  void             marshaller_add_compressed                   
> (SpiceMarshaller *m,
>                                                                RedCompressBuf 
> *comp_buf,
>                                                                size_t size);
> diff --git a/server/display-channel.c b/server/display-channel.c
> index ce973c5..a391c29 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -849,3 +849,15 @@ void display_channel_flush_all_surfaces(DisplayChannel 
> *display)
>          }
>      }
>  }
> +
> +static void rcc_free_glz_drawables_to_free(RedChannelClient *rcc)
> +{
> +    DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> +
> +    dcc_free_glz_drawables_to_free(dcc);
> +}
> +
> +void display_channel_free_glz_drawables_to_free(DisplayChannel *display)
> +{
> +    red_channel_apply_clients(RED_CHANNEL(display), 
> rcc_free_glz_drawables_to_free);
> +}
> diff --git a/server/display-channel.h b/server/display-channel.h
> index afb9ec5..684f983 100644
> --- a/server/display-channel.h
> +++ b/server/display-channel.h
> @@ -273,6 +273,7 @@ void                       display_channel_current_flush  
>            (DisplayCha
>                                                                        int 
> surface_id);
>  int                        display_channel_wait_for_migrate_data     
> (DisplayChannel *display);
>  void                       display_channel_flush_all_surfaces        
> (DisplayChannel *display);
> +void                       
> display_channel_free_glz_drawables_to_free(DisplayChannel *display);
>
>  static inline int is_equal_path(SpicePath *path1, SpicePath *path2)
>  {
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 9318a43..0144124 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -2006,23 +2006,6 @@ static void fill_base(SpiceMarshaller 
> *base_marshaller, Drawable *drawable)
>      spice_marshall_DisplayBase(base_marshaller, &base);
>  }
>
> -static void red_display_handle_glz_drawables_to_free(DisplayChannelClient* 
> dcc)
> -{
> -    RingItem *ring_link;
> -
> -    if (!dcc->glz_dict) {
> -        return;
> -    }
> -    pthread_mutex_lock(&dcc->glz_drawables_inst_to_free_lock);
> -    while ((ring_link = ring_get_head(&dcc->glz_drawables_inst_to_free))) {
> -        GlzDrawableInstanceItem *drawable_instance = 
> SPICE_CONTAINEROF(ring_link,
> -                                                                 
> GlzDrawableInstanceItem,
> -                                                                 free_link);
> -        dcc_free_glz_drawable_instance(dcc, drawable_instance);
> -    }
> -    pthread_mutex_unlock(&dcc->glz_drawables_inst_to_free_lock);
> -}
> -
>  /*
>   * Releases all the instances of the drawable from the dictionary and the 
> display channel client.
>   * The release of the last instance will also release the drawable itself 
> and the qxl drawable
> @@ -6834,13 +6817,6 @@ RedWorker* red_worker_new(QXLInstance *qxl, 
> RedDispatcher *red_dispatcher)
>      return worker;
>  }
>
> -static void red_display_cc_free_glz_drawables(RedChannelClient *rcc)
> -{
> -    DisplayChannelClient *dcc = RCC_TO_DCC(rcc);
> -
> -    red_display_handle_glz_drawables_to_free(dcc);
> -}
> -
>  SPICE_GNUC_NORETURN static void *red_worker_main(void *arg)
>  {
>      RedWorker *worker = arg;
> @@ -6876,8 +6852,7 @@ SPICE_GNUC_NORETURN static void *red_worker_main(void 
> *arg)
>              /* during migration, in the dest, the display channel can be 
> initialized
>                 while the global lz data not since migrate data msg hasn't 
> been
>                 received yet */
> -            red_channel_apply_clients(&worker->display_channel->common.base,
> -                                      red_display_cc_free_glz_drawables);
> +            
> display_channel_free_glz_drawables_to_free(worker->display_channel);
>          }
>
>          worker->event_timeout = INF_EVENT_WAIT;
> --
> 2.4.3
>
> _______________________________________________
> Spice-devel mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

ACK!
-- 
Fabiano Fidêncio
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to