Re: Memory leak in spice server

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

 



Hi,

I think I found a memory leak. The *first* buffer that was given as an output buffer to the mjpeg encoder when encoding a frame, wasn't released when it was replaced by a bigger buffer.

Can you check if the attached patch helps?

Thanks,
Yonit.

On 05/10/2012 05:52 AM, Charles.Tsai-蔡清海-研究發展部 wrote:
Alon,

	Recently, we found a severe memory leak in Spice server when we kept playing video on guest OS.
	After several days, memory was totally used and Spice server crashed. I am not sure whether your team found the similar
	problem before or not.

	The current Spice server we are running is from is 0.10.0 release. Let us know if you have found such a problem before.
	Thanks.


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

>From 42b7ba37f1a7b5c951dbd38670e126f8a7b46a3a Mon Sep 17 00:00:00 2001
From: Yonit Halperin <yhalperi@xxxxxxxxxx>
Date: Thu, 10 May 2012 12:26:01 +0300
Subject: [PATCH] mjpeg: Fix memory leak for the inital output buffer given
 for each frame

---
 server/mjpeg_encoder.c |    2 +-
 server/mjpeg_encoder.h |    2 ++
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
index 9c3d079..22a51c1 100644
--- a/server/mjpeg_encoder.c
+++ b/server/mjpeg_encoder.c
@@ -180,7 +180,7 @@ spice_jpeg_mem_dest(j_compress_ptr cinfo,
   dest->pub.term_destination = term_mem_destination;
   dest->outbuffer = outbuffer;
   dest->outsize = outsize;
-  dest->newbuffer = NULL;
+  dest->newbuffer = *outbuffer;
 
   if (*outbuffer == NULL || *outsize == 0) {
     /* Allocate initial buffer */
diff --git a/server/mjpeg_encoder.h b/server/mjpeg_encoder.h
index 91297d0..f9d5590 100644
--- a/server/mjpeg_encoder.h
+++ b/server/mjpeg_encoder.h
@@ -27,6 +27,8 @@ MJpegEncoder *mjpeg_encoder_new(void);
 void mjpeg_encoder_destroy(MJpegEncoder *encoder);
 
 uint8_t mjpeg_encoder_get_bytes_per_pixel(MJpegEncoder *encoder);
+/* if *dest != NULL, it must be allocated by malloc, since it can be freed
+ * during the ecoding */
 int mjpeg_encoder_start_frame(MJpegEncoder *encoder, SpiceBitmapFmt format,
                               int width, int height,
                               uint8_t **dest, size_t *dest_len);
-- 
1.7.7.6

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://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]