From 1740781a702cfab3930cd8529adffd14370892d5 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Wed, 19 Sep 2007 12:31:16 +0000 Subject: [PATCH] gst/gstelementfactory.c: Release static caps. Fixes #475723. Original commit message from CVS: * gst/gstelementfactory.c: Release static caps. Fixes #475723. --- ChangeLog | 5 +++++ gst/gstelementfactory.c | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d6029cb..ea81082 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-09-19 Stefan Kost + + * gst/gstelementfactory.c: + Release static caps. Fixes #475723. + 2007-09-18 Tim-Philipp Müller * gst/gstinfo.c: diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index bf0025d..a4d40c6 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -217,10 +217,24 @@ gst_element_factory_cleanup (GstElementFactory * factory) for (item = factory->staticpadtemplates; item; item = item->next) { GstStaticPadTemplate *templ = item->data; + GstCaps *caps = (GstCaps *) & (templ->static_caps); g_free (templ->name_template); g_free ((gchar *) templ->static_caps.string); - memset (&(templ->static_caps), 0, sizeof (GstStaticCaps)); + + /* FIXME: this is not threadsafe */ + if (caps->refcount == 1) { + GstStructure *structure; + guint i; + + for (i = 0; i < caps->structs->len; i++) { + structure = (GstStructure *) gst_caps_get_structure (caps, i); + gst_structure_set_parent_refcount (structure, NULL); + gst_structure_free (structure); + } + g_ptr_array_free (caps->structs, TRUE); + caps->refcount = 0; + } g_free (templ); } g_list_free (factory->staticpadtemplates); -- 2.7.4