diff --git a/ChangeLog b/ChangeLog index 9ccf5c7531..4571c80d30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-06-19 Wim Taymans + + Patch by: Laurent Glayal + + * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init), + (gst_amrnbdec_finalize): + Don't leak the adapter, unref it in a new finalize method instead. + Fixes #448782. + 2007-06-19 Jan Schmidt * configure.ac: diff --git a/ext/amrnb/amrnbdec.c b/ext/amrnb/amrnbdec.c index 2f2cdf01b3..07a7faac76 100644 --- a/ext/amrnb/amrnbdec.c +++ b/ext/amrnb/amrnbdec.c @@ -53,6 +53,8 @@ static gboolean gst_amrnbdec_setcaps (GstPad * pad, GstCaps * caps); static GstStateChangeReturn gst_amrnbdec_state_change (GstElement * element, GstStateChange transition); +static void gst_amrnbdec_finalize (GObject * object); + #define _do_init(bla) \ GST_DEBUG_CATEGORY_INIT (gst_amrnbdec_debug, "amrnbdec", 0, "AMR-NB audio decoder"); @@ -79,8 +81,11 @@ gst_amrnbdec_base_init (gpointer klass) static void gst_amrnbdec_class_init (GstAmrnbDecClass * klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + object_class->finalize = gst_amrnbdec_finalize; + element_class->change_state = GST_DEBUG_FUNCPTR (gst_amrnbdec_state_change); } @@ -109,6 +114,19 @@ gst_amrnbdec_init (GstAmrnbDec * amrnbdec, GstAmrnbDecClass * klass) amrnbdec->handle = NULL; } +static void +gst_amrnbdec_finalize (GObject * object) +{ + GstAmrnbDec *amrnbdec; + + amrnbdec = GST_AMRNBDEC (object); + + gst_adapter_clear (amrnbdec->adapter); + g_object_unref (amrnbdec->adapter); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + static gboolean gst_amrnbdec_setcaps (GstPad * pad, GstCaps * caps) {