[Spice-devel] [PATCH 08/10] Make glz_dictionary_list a GList

Frediano Ziglio fziglio at redhat.com
Thu Sep 8 17:22:58 UTC 2016


> 
> Removing more intrusive RingItems from various structures and improving
> readibility.
> ---
>  server/image-encoders.c | 17 +++++++----------
>  1 file changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/server/image-encoders.c b/server/image-encoders.c
> index 5759230..39aca6c 100644
> --- a/server/image-encoders.c
> +++ b/server/image-encoders.c
> @@ -36,7 +36,6 @@ typedef struct RedGlzDrawable RedGlzDrawable;
>  typedef struct GlzDrawableInstanceItem GlzDrawableInstanceItem;
>  
>  struct GlzSharedDictionary {
> -    RingItem base;
>      GlzEncDictContext *dict;
>      uint32_t refs;
>      uint8_t id;
> @@ -694,23 +693,21 @@ static GlzSharedDictionary
> *glz_shared_dictionary_new(RedClient *client, uint8_t
>      shared_dict->refs = 1;
>      shared_dict->migrate_freeze = FALSE;
>      shared_dict->client = client;
> -    ring_item_init(&shared_dict->base);
>      pthread_rwlock_init(&shared_dict->encode_lock, NULL);
>  
>      return shared_dict;
>  }
>  
>  static pthread_mutex_t glz_dictionary_list_lock = PTHREAD_MUTEX_INITIALIZER;
> -static Ring glz_dictionary_list = {&glz_dictionary_list,
> &glz_dictionary_list};
> +static GList *glz_dictionary_list;
>  
>  static GlzSharedDictionary *find_glz_dictionary(RedClient *client, uint8_t
>  dict_id)
>  {
> -    RingItem *now;
> +    GList *l;
>      GlzSharedDictionary *ret = NULL;
>  
> -    now = &glz_dictionary_list;
> -    while ((now = ring_next(&glz_dictionary_list, now))) {
> -        GlzSharedDictionary *dict = SPICE_UPCAST(GlzSharedDictionary, now);
> +    for (l = glz_dictionary_list; l != NULL; l = l->next) {
> +        GlzSharedDictionary *dict = l->data;
>          if ((dict->client == client) && (dict->id == dict_id)) {
>              ret = dict;
>              break;
> @@ -749,7 +746,7 @@ gboolean image_encoders_get_glz_dictionary(ImageEncoders
> *enc,
>          shared_dict->refs++;
>      } else {
>          shared_dict = create_glz_dictionary(enc, client, id, window_size);
> -        ring_add(&glz_dictionary_list, &shared_dict->base);
> +        glz_dictionary_list = g_list_prepend(glz_dictionary_list,
> shared_dict);
>      }
>  
>      pthread_mutex_unlock(&glz_dictionary_list_lock);
> @@ -785,7 +782,7 @@ gboolean
> image_encoders_restore_glz_dictionary(ImageEncoders *enc,
>          shared_dict->refs++;
>      } else {
>          shared_dict = restore_glz_dictionary(enc, client, id, restore_data);
> -        ring_add(&glz_dictionary_list, &shared_dict->base);
> +        glz_dictionary_list = g_list_prepend(glz_dictionary_list,
> shared_dict);
>      }
>  
>      pthread_mutex_unlock(&glz_dictionary_list_lock);
> @@ -819,7 +816,7 @@ static void image_encoders_release_glz(ImageEncoders
> *enc)
>          pthread_mutex_unlock(&glz_dictionary_list_lock);
>          return;
>      }
> -    ring_remove(&shared_dict->base);
> +    glz_dictionary_list = g_list_remove(glz_dictionary_list, shared_dict);
>      pthread_mutex_unlock(&glz_dictionary_list_lock);
>      glz_enc_dictionary_destroy(shared_dict->dict, &enc->glz_data.usr);
>      pthread_rwlock_destroy(&shared_dict->encode_lock);

I don't see much more readability after this patch and the structure is
well contained.
Surely it increase the memory usage.
And possibly conflict with patches I sent quite a while ago.

Frediano


More information about the Spice-devel mailing list