aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorentin Chary <corentincj@iksaif.net>2010-05-19 09:24:08 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2010-06-01 12:53:09 -0500
commit161c4f20bfbd54f0b77426adccb68ee831678af0 (patch)
treeb61ba391c826cee4811ddba94b415513dab9f1ec
parent5d418e3ba96cfa810e00885a52b55f19cac8f9a6 (diff)
vnc: remove a memory leak in zlib
Makes sure we free all ressources used in zlib encoding (zlib stream and buffer). Signed-off-by: Corentin Chary <corentincj@iksaif.net> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--vnc-encoding-zlib.c8
-rw-r--r--vnc.c2
-rw-r--r--vnc.h1
3 files changed, 11 insertions, 0 deletions
diff --git a/vnc-encoding-zlib.c b/vnc-encoding-zlib.c
index 52b18aa84a..1d4dd1aa47 100644
--- a/vnc-encoding-zlib.c
+++ b/vnc-encoding-zlib.c
@@ -140,3 +140,11 @@ void vnc_zlib_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
vnc_write_u32(vs, bytes_written);
vs->output.offset = new_offset;
}
+
+void vnc_zlib_clear(VncState *vs)
+{
+ if (vs->zlib_stream.opaque) {
+ deflateEnd(&vs->zlib_stream);
+ }
+ buffer_free(&vs->zlib);
+}
diff --git a/vnc.c b/vnc.c
index 6b2f7241a8..f48f253675 100644
--- a/vnc.c
+++ b/vnc.c
@@ -974,6 +974,8 @@ static void vnc_disconnect_finish(VncState *vs)
qobject_decref(vs->info);
+ vnc_zlib_clear(vs);
+
#ifdef CONFIG_VNC_TLS
vnc_tls_client_cleanup(vs);
#endif /* CONFIG_VNC_TLS */
diff --git a/vnc.h b/vnc.h
index c97113b8ea..2fbe614484 100644
--- a/vnc.h
+++ b/vnc.h
@@ -405,5 +405,6 @@ void vnc_hextile_send_framebuffer_update(VncState *vs, int x,
void vnc_hextile_set_pixel_conversion(VncState *vs, int generic);
void vnc_zlib_send_framebuffer_update(VncState *vs, int x, int y, int w, int h);
+void vnc_zlib_clear(VncState *vs);
#endif /* __QEMU_VNC_H */