[Spice-devel] [PATCH 1/2] server/mjpeg_encoder: Fix memory leak for the inital output buffer given for each frame
Alon Levy
alevy at redhat.com
Sun May 13 05:24:37 PDT 2012
On Thu, May 10, 2012 at 02:09:04PM +0300, Yonit Halperin wrote:
> ---
Good catch!
ACK both.
> server/mjpeg_encoder.c | 11 +++--------
> server/mjpeg_encoder.h | 5 +++++
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
> index 9c3d079..3c2fc31 100644
> --- a/server/mjpeg_encoder.c
> +++ b/server/mjpeg_encoder.c
> @@ -101,7 +101,6 @@ typedef struct {
>
> unsigned char ** outbuffer; /* target buffer */
> size_t * outsize;
> - unsigned char * newbuffer; /* newly allocated buffer */
> uint8_t * buffer; /* start of buffer */
> size_t bufsize;
> } mem_destination_mgr;
> @@ -125,9 +124,7 @@ static boolean empty_mem_output_buffer(j_compress_ptr cinfo)
>
> memcpy(nextbuffer, dest->buffer, dest->bufsize);
>
> - free(dest->newbuffer);
> -
> - dest->newbuffer = nextbuffer;
> + free(dest->buffer);
>
> dest->pub.next_output_byte = nextbuffer + dest->bufsize;
> dest->pub.free_in_buffer = dest->bufsize;
> @@ -180,12 +177,10 @@ spice_jpeg_mem_dest(j_compress_ptr cinfo,
> dest->pub.term_destination = term_mem_destination;
> dest->outbuffer = outbuffer;
> dest->outsize = outsize;
> - dest->newbuffer = NULL;
> -
> if (*outbuffer == NULL || *outsize == 0) {
> /* Allocate initial buffer */
> - dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE);
> - if (dest->newbuffer == NULL)
> + *outbuffer = malloc(OUTPUT_BUF_SIZE);
> + if (*outbuffer == NULL)
> ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
> *outsize = OUTPUT_BUF_SIZE;
> }
> diff --git a/server/mjpeg_encoder.h b/server/mjpeg_encoder.h
> index 91297d0..b9a2ed7 100644
> --- a/server/mjpeg_encoder.h
> +++ b/server/mjpeg_encoder.h
> @@ -27,6 +27,11 @@ MJpegEncoder *mjpeg_encoder_new(void);
> void mjpeg_encoder_destroy(MJpegEncoder *encoder);
>
> uint8_t mjpeg_encoder_get_bytes_per_pixel(MJpegEncoder *encoder);
> +
> +/*
> + * *dest must be either NULL or allocated by malloc, since it might be freed
> + * during the encoding, if its size is too small.
> + */
> 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list