Re: [PATCH v4 11/19] Better encapsulation for image_encoders_compress_glz call

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2016-06-14 at 10:33 +0100, Frediano Ziglio wrote:
> Do not access too much encoders data.
> Slightly different as now if glz is frozen lz compression is used.

This *seems* safe, though I don't know the code enough to know what side-effects 
it might have. Would like a second opinion.

> 
> Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
> ---
>  server/dcc-encoders.c | 15 +++++++++++++++
>  server/dcc.c          | 17 ++++-------------
>  2 files changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
> index 6668dff..3547adc 100644
> --- a/server/dcc-encoders.c
> +++ b/server/dcc-encoders.c
> @@ -1191,6 +1191,17 @@ int image_encoders_compress_glz(ImageEncoders *enc,
>      spice_info("LZ global compress fmt=%d", src->format);
>  #endif
>  
> +    if ((src->x * src->y) >= glz_enc_dictionary_get_size(enc->glz_dict-
> >dict)) {
> +        return FALSE;
> +    }
> +
> +    pthread_rwlock_rdlock(&enc->glz_dict->encode_lock);
> +    /* using the global dictionary only if it is not frozen */
> +    if (enc->glz_dict->migrate_freeze) {
> +        pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
> +        return FALSE;
> +    }
> +
>      encoder_data_init(&glz_data->data);
>  
>      glz_drawable = get_glz_drawable(enc, drawable);
> @@ -1241,8 +1252,12 @@ int image_encoders_compress_glz(ImageEncoders *enc,
>      o_comp_data->comp_buf_size = zlib_size;
>  
>      stat_compress_add(&enc->shared_data->zlib_glz_stat, start_time, glz_size,
> zlib_size);
> +    pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
>      return TRUE;
> +
>  glz:
> +    pthread_rwlock_unlock(&enc->glz_dict->encode_lock);
> +
>      dest->descriptor.type = SPICE_IMAGE_TYPE_GLZ_RGB;
>      dest->u.lz_rgb.data_size = glz_size;
>  
> diff --git a/server/dcc.c b/server/dcc.c
> index e44feb7..3190c94 100644
> --- a/server/dcc.c
> +++ b/server/dcc.c
> @@ -740,19 +740,10 @@ int dcc_compress_image(DisplayChannelClient *dcc,
>          success = image_encoders_compress_quic(&dcc->encoders, dest, src,
> o_comp_data);
>          break;
>      case SPICE_IMAGE_COMPRESSION_GLZ:
> -        if ((src->x * src->y) < glz_enc_dictionary_get_size(dcc-
> >encoders.glz_dict->dict)) {
> -            int frozen;
> -            /* using the global dictionary only if it is not frozen */
> -            pthread_rwlock_rdlock(&dcc->encoders.glz_dict->encode_lock);
> -            frozen = dcc->encoders.glz_dict->migrate_freeze;
> -            if (!frozen) {
> -                success = image_encoders_compress_glz(&dcc->encoders, dest,
> src, drawable, o_comp_data,
> -                                                      display_channel-
> >enable_zlib_glz_wrap);
> -            }
> -            pthread_rwlock_unlock(&dcc->encoders.glz_dict->encode_lock);
> -            if (!frozen) {
> -                break;
> -            }
> +        success = image_encoders_compress_glz(&dcc->encoders, dest, src,
> drawable, o_comp_data,
> +                                              display_channel-
> >enable_zlib_glz_wrap);
> +        if (success) {
> +            break;
>          }
>          goto lz_compress;
>  #ifdef USE_LZ4
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]