summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2010-12-04 18:53:55 -0800
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2012-01-26 15:44:10 +0000
commit9048b4dc2af3d80ff696280565143975da80d017 (patch)
tree0c094b0c7bdf3432926296dd40e9767b0169af22
parent2d4edcf83f8b96e0c845e2aa6971dd84e528d616 (diff)
element: call ->release_pad() to clean up pad
https://bugzilla.gnome.org/show_bug.cgi?id=636011 https://bugzilla.gnome.org/show_bug.cgi?id=402562
-rw-r--r--gst/gstelement.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gst/gstelement.c b/gst/gstelement.c
index 91a4c4c9ee..30c73f2096 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -316,6 +316,8 @@ gst_element_release_request_pad (GstElement * element, GstPad * pad)
g_return_if_fail (GST_IS_ELEMENT (element));
g_return_if_fail (GST_IS_PAD (pad));
+ g_return_if_fail (GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad))
+ == GST_PAD_REQUEST);
oclass = GST_ELEMENT_GET_CLASS (element);
@@ -2747,6 +2749,9 @@ gst_element_dispose (GObject * object)
GstElement *element = GST_ELEMENT_CAST (object);
GstClock **clock_p;
GstBus **bus_p;
+ GstElementClass *oclass;
+
+ oclass = GST_ELEMENT_GET_CLASS (element);
GST_CAT_INFO_OBJECT (GST_CAT_REFCOUNTING, element, "dispose");
@@ -2757,8 +2762,15 @@ gst_element_dispose (GObject * object)
"removing %d pads", g_list_length (element->pads));
/* first we break all our links with the outside */
while (element->pads && element->pads->data) {
+ GstPad *pad = GST_PAD_CAST (element->pads->data);
+
/* don't call _remove_pad with NULL */
- gst_element_remove_pad (element, GST_PAD_CAST (element->pads->data));
+ if (oclass->release_pad && GST_PAD_PAD_TEMPLATE (pad) &&
+ GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad))
+ == GST_PAD_REQUEST)
+ (oclass->release_pad) (element, GST_PAD_CAST (element->pads->data));
+ else
+ gst_element_remove_pad (element, GST_PAD_CAST (element->pads->data));
}
if (G_UNLIKELY (element->pads != NULL)) {
g_critical ("could not remove pads from element %s",