This commit reworks a bit the management of RedCompressBuf so that compress_buf_new/compress_buf_free become unneeded. Since d25d6ca0 and the introduction of encoder_data_reset, compress_buf_free is already unused outside of dcc-encoders.c and could be static. This in turn makes compress_buf_new a bit odd as the matching destructor is never used in dcc.c. This commit introduces an encoder_data_init() method which is hiding the initialization of the EncoderData structure from the dcc.c code, allowing to get rid of compress_buf_new() calls from dcc.c code. It also uses this as an opportunity to stop using GSlice for RedCompressBuf. --- server/dcc-encoders.c | 22 ++++++++-------------- server/dcc-encoders.h | 4 +--- server/dcc.c | 31 ++++++------------------------- 3 files changed, 15 insertions(+), 42 deletions(-) diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c index 26f3070..0923c9c 100644 --- a/server/dcc-encoders.c +++ b/server/dcc-encoders.c @@ -136,18 +136,12 @@ static void glz_usr_free(GlzEncoderUsrContext *usr, void *ptr) free(ptr); } -RedCompressBuf* compress_buf_new(void) +void encoder_data_init(EncoderData *data, DisplayChannelClient *dcc) { - RedCompressBuf *buf = g_slice_new(RedCompressBuf); - - buf->send_next = NULL; - - return buf; -} - -void compress_buf_free(RedCompressBuf *buf) -{ - g_slice_free(RedCompressBuf, buf); + data->bufs_tail = g_new(RedCompressBuf, 1); + data->bufs_head = data->bufs_tail; + data->dcc = dcc; + data->bufs_head->send_next = NULL; } void encoder_data_reset(EncoderData *data) @@ -155,7 +149,7 @@ void encoder_data_reset(EncoderData *data) RedCompressBuf *buf = data->bufs_head; while (buf) { RedCompressBuf *next = buf->send_next; - compress_buf_free(buf); + g_free(buf); buf = next; } data->bufs_head = data->bufs_tail = NULL; @@ -168,7 +162,7 @@ static int encoder_usr_more_space(EncoderData *enc_data, uint8_t **io_ptr) { RedCompressBuf *buf; - buf = compress_buf_new(); + buf = g_new(RedCompressBuf, 1); enc_data->bufs_tail->send_next = buf; enc_data->bufs_tail = buf; buf->send_next = NULL; @@ -435,7 +429,7 @@ void dcc_encoders_free(DisplayChannelClient *dcc) static void marshaller_compress_buf_free(uint8_t *data, void *opaque) { - compress_buf_free((RedCompressBuf *) opaque); + g_free(opaque); } void marshaller_add_compressed(SpiceMarshaller *m, diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h index 7046f1c..a244c94 100644 --- a/server/dcc-encoders.h +++ b/server/dcc-encoders.h @@ -51,9 +51,6 @@ void marshaller_add_compressed (SpiceMarshaller *m RedCompressBuf *comp_buf, size_t size); -RedCompressBuf* compress_buf_new (void); -void compress_buf_free (RedCompressBuf *buf); - #define RED_COMPRESS_BUF_SIZE (1024 * 64) struct RedCompressBuf { /* This buffer provide space for compression algorithms. @@ -103,6 +100,7 @@ typedef struct { char message_buf[512]; } EncoderData; +void encoder_data_init(EncoderData *data, DisplayChannelClient *dcc); void encoder_data_reset(EncoderData *data); typedef struct { diff --git a/server/dcc.c b/server/dcc.c index eb5e4d1..2568e24 100644 --- a/server/dcc.c +++ b/server/dcc.c @@ -662,9 +662,7 @@ int dcc_compress_image_glz(DisplayChannelClient *dcc, int glz_size; int zlib_size; - glz_data->data.bufs_tail = compress_buf_new(); - glz_data->data.bufs_head = glz_data->data.bufs_tail; - glz_data->data.dcc = dcc; + encoder_data_init(&glz_data->data, dcc); glz_drawable = get_glz_drawable(dcc, drawable); glz_drawable_instance = add_glz_drawable_instance(glz_drawable); @@ -689,9 +687,7 @@ int dcc_compress_image_glz(DisplayChannelClient *dcc, stat_start_time_init(&start_time, &display_channel->zlib_glz_stat); zlib_data = &dcc->zlib_data; - zlib_data->data.bufs_tail = compress_buf_new(); - zlib_data->data.bufs_head = zlib_data->data.bufs_tail; - zlib_data->data.dcc = dcc; + encoder_data_init(&zlib_data->data, dcc); zlib_data->data.u.compressed_data.next = glz_data->data.bufs_head; zlib_data->data.u.compressed_data.size_left = glz_size; @@ -739,9 +735,7 @@ int dcc_compress_image_lz(DisplayChannelClient *dcc, stat_start_time_t start_time; stat_start_time_init(&start_time, &DCC_TO_DC(dcc)->lz_stat); - lz_data->data.bufs_tail = compress_buf_new(); - lz_data->data.bufs_head = lz_data->data.bufs_tail; - lz_data->data.dcc = dcc; + encoder_data_init(&lz_data->data, dcc); if (setjmp(lz_data->data.jmp_env)) { encoder_data_reset(&lz_data->data); @@ -828,9 +822,7 @@ int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest, return FALSE; } - jpeg_data->data.bufs_tail = compress_buf_new(); - jpeg_data->data.bufs_head = jpeg_data->data.bufs_tail; - jpeg_data->data.dcc = dcc; + encoder_data_init(&jpeg_data->data, dcc); if (setjmp(jpeg_data->data.jmp_env)) { encoder_data_reset(&jpeg_data->data); @@ -928,16 +920,7 @@ int dcc_compress_image_lz4(DisplayChannelClient *dcc, SpiceImage *dest, stat_start_time_t start_time; stat_start_time_init(&start_time, &DCC_TO_DC(dcc)->lz4_stat); - lz4_data->data.bufs_tail = compress_buf_new(); - lz4_data->data.bufs_head = lz4_data->data.bufs_tail; - - if (!lz4_data->data.bufs_head) { - spice_warning("failed to allocate compress buffer"); - return FALSE; - } - - lz4_data->data.bufs_head->send_next = NULL; - lz4_data->data.dcc = dcc; + encoder_data_init(&lz4_data->data, dcc); if (setjmp(lz4_data->data.jmp_env)) { encoder_data_reset(&lz4_data->data); @@ -1002,9 +985,7 @@ int dcc_compress_image_quic(DisplayChannelClient *dcc, SpiceImage *dest, return FALSE; } - quic_data->data.bufs_tail = compress_buf_new(); - quic_data->data.bufs_head = quic_data->data.bufs_tail; - quic_data->data.dcc = dcc; + encoder_data_init(&quic_data->data, dcc); if (setjmp(quic_data->data.jmp_env)) { encoder_data_reset(&quic_data->data); -- 2.5.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel