[Spice-devel] [PATCH 2/2] dcc: write and use a new encoder_data_reset function to clean buffers
Frediano Ziglio
fziglio at redhat.com
Thu Jan 7 08:30:22 PST 2016
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/dcc-encoders.c | 11 +++++++++++
server/dcc-encoders.h | 2 ++
server/dcc.c | 37 ++++++-------------------------------
3 files changed, 19 insertions(+), 31 deletions(-)
diff --git a/server/dcc-encoders.c b/server/dcc-encoders.c
index a373412..26f3070 100644
--- a/server/dcc-encoders.c
+++ b/server/dcc-encoders.c
@@ -150,6 +150,17 @@ void compress_buf_free(RedCompressBuf *buf)
g_slice_free(RedCompressBuf, buf);
}
+void encoder_data_reset(EncoderData *data)
+{
+ RedCompressBuf *buf = data->bufs_head;
+ while (buf) {
+ RedCompressBuf *next = buf->send_next;
+ compress_buf_free(buf);
+ buf = next;
+ }
+ data->bufs_head = data->bufs_tail = NULL;
+}
+
/* Allocate more space for compressed buffer.
* The pointer returned in io_ptr is garanteed to be aligned to 4 bytes.
*/
diff --git a/server/dcc-encoders.h b/server/dcc-encoders.h
index 4e9b66a..7046f1c 100644
--- a/server/dcc-encoders.h
+++ b/server/dcc-encoders.h
@@ -103,6 +103,8 @@ typedef struct {
char message_buf[512];
} EncoderData;
+void encoder_data_reset(EncoderData *data);
+
typedef struct {
QuicUsrContext usr;
EncoderData data;
diff --git a/server/dcc.c b/server/dcc.c
index 7348627..c23936a 100644
--- a/server/dcc.c
+++ b/server/dcc.c
@@ -702,19 +702,10 @@ int dcc_compress_image_glz(DisplayChannelClient *dcc,
// the compressed buffer is bigger than the original data
if (zlib_size >= glz_size) {
- while (zlib_data->data.bufs_head) {
- RedCompressBuf *buf = zlib_data->data.bufs_head;
- zlib_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
+ encoder_data_reset(&zlib_data->data);
goto glz;
} else {
- while (glz_data->data.bufs_head) {
- RedCompressBuf *buf = glz_data->data.bufs_head;
- glz_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
- glz_data->data.bufs_tail = NULL;
+ encoder_data_reset(&glz_data->data);
}
dest->descriptor.type = SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB;
@@ -753,11 +744,7 @@ int dcc_compress_image_lz(DisplayChannelClient *dcc,
lz_data->data.dcc = dcc;
if (setjmp(lz_data->data.jmp_env)) {
- while (lz_data->data.bufs_head) {
- RedCompressBuf *buf = lz_data->data.bufs_head;
- lz_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
+ encoder_data_reset(&lz_data->data);
return FALSE;
}
@@ -846,11 +833,7 @@ int dcc_compress_image_jpeg(DisplayChannelClient *dcc, SpiceImage *dest,
jpeg_data->data.dcc = dcc;
if (setjmp(jpeg_data->data.jmp_env)) {
- while (jpeg_data->data.bufs_head) {
- RedCompressBuf *buf = jpeg_data->data.bufs_head;
- jpeg_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
+ encoder_data_reset(&jpeg_data->data);
return FALSE;
}
@@ -957,11 +940,7 @@ int dcc_compress_image_lz4(DisplayChannelClient *dcc, SpiceImage *dest,
lz4_data->data.dcc = dcc;
if (setjmp(lz4_data->data.jmp_env)) {
- while (lz4_data->data.bufs_head) {
- RedCompressBuf *buf = lz4_data->data.bufs_head;
- lz4_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
+ encoder_data_reset(&lz4_data->data);
return FALSE;
}
@@ -1028,11 +1007,7 @@ int dcc_compress_image_quic(DisplayChannelClient *dcc, SpiceImage *dest,
quic_data->data.dcc = dcc;
if (setjmp(quic_data->data.jmp_env)) {
- while (quic_data->data.bufs_head) {
- RedCompressBuf *buf = quic_data->data.bufs_head;
- quic_data->data.bufs_head = buf->send_next;
- compress_buf_free(buf);
- }
+ encoder_data_reset(&quic_data->data);
return FALSE;
}
--
2.4.3
More information about the Spice-devel
mailing list