gst/gstelementfactory.c: Release static caps. Fixes #475723.
authorStefan Kost <ensonic@users.sourceforge.net>
Wed, 19 Sep 2007 12:31:16 +0000 (12:31 +0000)
committerStefan Kost <ensonic@users.sourceforge.net>
Wed, 19 Sep 2007 12:31:16 +0000 (12:31 +0000)
Original commit message from CVS:
* gst/gstelementfactory.c:
Release static caps. Fixes #475723.

ChangeLog
gst/gstelementfactory.c

index d6029cb..ea81082 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-09-19  Stefan Kost  <ensonic@users.sf.net>
+
+       * gst/gstelementfactory.c:
+         Release static caps. Fixes #475723.
+
 2007-09-18  Tim-Philipp Müller  <tim at centricular dot net>
 
        * gst/gstinfo.c:
index bf0025d..a4d40c6 100644 (file)
@@ -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);