[gst-devel] Memory leak on a PushSrc subclass

Jan Schmidt thaytan at noraisin.net
Wed Aug 16 11:17:49 CEST 2006

On Wed, 2006-08-16 at 10:26 +0200, Corentin BARON wrote:
> Hello list,
> I've got a memory leak problem I couldn't deal with. In my create()  
> function, I instanciate a GstBuffer, and the data I put in it, and  
> then set the GstBuffer's data pointer to the data I just created.  
> Everything works fine excepts that the data I created seems to be  
> lost somewhere in the pipeline.
> Here's a part of the create() function:
> > static GstFlowReturn gst_blinkysrc_create(GstPushSrc * psrc,  
> > GstBuffer ** buffer)
> > {
> > 	GstBuffer *buf;
> > 	void *dest;
> > 	GstBlinkySrc *filter = GST_BLINKYSRC(psrc);
> > 	[...]
> > 	buf = gst_buffer_new();
> > 	gst_buffer_set_data(buf, dest, outbufsize);
> > 	g_return_val_if_fail(buf != NULL, GST_FLOW_ERROR);
> > 	*buffer = buf;
> > 	return GST_FLOW_OK;
> > }

When you do gst_buffer_new() and then set the data, the buffer considers
that it doesn't own the data itself and won't free it. You can either do
gst_buffer_new_and_alloc(), or ensure that when you set the data on the
buffer you also set the malloc_data member of the GstBuffer to point to
the array.

>From the DevHelp docs for GstBuffer:

guint8 *malloc_data;  a pointer to the allocated memory associated with
this buffer. When the buffer is freed, this data will freed with free().


Jan Schmidt thaytan at noraisin.net

Have you been half-asleep? Have you heard voices?
I've heard them calling my name...
-Kermit the Frog (Rainbow Connection)

More information about the gstreamer-devel mailing list