From 14de34d6ecd6e1964a0ff66d9115a83a62975663 Mon Sep 17 00:00:00 2001 From: Julien Moutte Date: Sun, 5 Feb 2006 18:13:28 +0000 Subject: [PATCH] libs/gst/base/gstcollectpads.c: Collectpads now holds a reference to the GstPad that was added. Indeed we don't want ... Original commit message from CVS: 2006-02-05 Julien MOUTTE * libs/gst/base/gstcollectpads.c: (gst_collect_pads_finalize), (gst_collect_pads_add_pad), (gst_collect_pads_remove_pad), (gst_collect_pads_start), (gst_collect_pads_stop), (gst_collect_pads_event): Collectpads now holds a reference to the GstPad that was added. Indeed we don't want to look at pads that might just go away with no warning... --- ChangeLog | 9 +++++++++ libs/gst/base/gstcollectpads.c | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f460b17..acc2ae2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2006-02-05 Julien MOUTTE + * libs/gst/base/gstcollectpads.c: (gst_collect_pads_finalize), + (gst_collect_pads_add_pad), (gst_collect_pads_remove_pad), + (gst_collect_pads_start), (gst_collect_pads_stop), + (gst_collect_pads_event): Collectpads now holds a reference + to the GstPad that was added. Indeed we don't want to look + at pads that might just go away with no warning... + +2006-02-05 Julien MOUTTE + * libs/gst/base/gstcollectpads.c: (gst_collect_pads_add_pad), (gst_collect_pads_start), (gst_collect_pads_stop), (gst_collect_pads_event), (gst_collect_pads_chain): diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c index 2be453c..ca9a8dc 100644 --- a/libs/gst/base/gstcollectpads.c +++ b/libs/gst/base/gstcollectpads.c @@ -112,10 +112,23 @@ gst_collect_pads_init (GstCollectPads * pads, GstCollectPadsClass * g_class) static void gst_collect_pads_finalize (GObject * object) { + GSList *collected; GstCollectPads *pads = GST_COLLECT_PADS (object); gst_collect_pads_stop (pads); g_cond_free (pads->cond); + + /* Remove pads */ + for (collected = pads->data; collected; collected = g_slist_next (collected)) { + GstCollectData *pdata = (GstCollectData *) collected->data; + + if (pdata->pad) { + gst_object_unref (pdata->pad); + } + } + /* Free pads list */ + g_slist_free (pads->data); + /* FIXME, free data */ G_OBJECT_CLASS (parent_class)->finalize (object); @@ -194,7 +207,7 @@ gst_collect_pads_add_pad (GstCollectPads * pads, GstPad * pad, guint size) data = g_malloc0 (size); data->collect = pads; - data->pad = pad; + data->pad = gst_object_ref (pad); data->buffer = NULL; gst_segment_init (&data->segment, GST_FORMAT_UNDEFINED); data->abidata.ABI.flushing = FALSE; @@ -246,6 +259,7 @@ gst_collect_pads_remove_pad (GstCollectPads * pads, GstPad * pad) if (list) { g_free (list->data); pads->data = g_slist_delete_link (pads->data, list); + gst_object_unref (pad); } pads->numpads--; /* FIXME : if the pad has data queued we should decrease the number of -- 2.7.4