docs/gst/gstreamer-sections.txt: Add GST_CHECK_VERSION to the docs
authorJulien Moutte <julien@moutte.net>
Fri, 1 Feb 2008 16:37:22 +0000 (16:37 +0000)
committerJulien Moutte <julien@moutte.net>
Fri, 1 Feb 2008 16:37:22 +0000 (16:37 +0000)
Original commit message from CVS:
2008-02-01  Julien Moutte  <julien@fluendo.com>

* docs/gst/gstreamer-sections.txt: Add GST_CHECK_VERSION to the
docs
* gst/gstindex.c: (gst_index_class_init),
(gst_index_free_writer),
(gst_index_finalize), (gst_index_entry_free),
(gst_index_add_association): Fix memory leaks.
* gst/gstversion.h.in: Add GST_CHECK_VERSION macro.
* plugins/indexers/gstmemindex.c: (gst_mem_index_class_init),
(gst_mem_index_free_format), (gst_mem_index_free_id),
(gst_mem_index_finalize): Fix memory leaks.
* win32/common/config.h: Updated to CVS HEAD.

ChangeLog
docs/gst/gstreamer-sections.txt
gst/gstindex.c
gst/gstversion.h.in
plugins/indexers/gstmemindex.c
win32/common/config.h

index 96845f9..eadda49 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-02-01  Julien Moutte  <julien@fluendo.com>
+
+       * docs/gst/gstreamer-sections.txt: Add GST_CHECK_VERSION to the docs
+       * gst/gstindex.c: (gst_index_class_init), (gst_index_free_writer),
+       (gst_index_finalize), (gst_index_entry_free),
+       (gst_index_add_association): Fix memory leaks.
+       * gst/gstversion.h.in: Add GST_CHECK_VERSION macro.
+       * plugins/indexers/gstmemindex.c: (gst_mem_index_class_init),
+       (gst_mem_index_free_format), (gst_mem_index_free_id),
+       (gst_mem_index_finalize): Fix memory leaks.
+       * win32/common/config.h: Updated to CVS HEAD.
+
 2008-02-01  Stefan Kost  <ensonic@users.sf.net>
 
        * docs/README:
index 3fe399b..ec703eb 100644 (file)
@@ -2318,6 +2318,7 @@ GST_VERSION_MAJOR
 GST_VERSION_MINOR
 GST_VERSION_MICRO
 GST_VERSION_NANO
+GST_CHECK_VERSION
 </SECTION>
 
 
index 7b2a73d..d5f1c57 100644 (file)
@@ -56,6 +56,7 @@ enum
 
 static void gst_index_class_init (GstIndexClass * klass);
 static void gst_index_init (GstIndex * index);
+static void gst_index_finalize (GObject * object);
 
 static void gst_index_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -171,6 +172,7 @@ gst_index_class_init (GstIndexClass * klass)
 
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_index_set_property);
   gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_index_get_property);
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_index_finalize);
 
   g_object_class_install_property (gobject_class, ARG_RESOLVER,
       g_param_spec_enum ("resolver", "Resolver",
@@ -199,6 +201,34 @@ gst_index_init (GstIndex * index)
 }
 
 static void
+gst_index_free_writer (gpointer key, gpointer value, gpointer user_data)
+{
+  GstIndexEntry *entry = (GstIndexEntry *) value;
+
+  if (entry) {
+    gst_index_entry_free (entry);
+  }
+}
+
+static void
+gst_index_finalize (GObject * object)
+{
+  GstIndex *index = GST_INDEX (object);
+
+  if (index->groups) {
+    g_list_foreach (index->groups, (GFunc) g_free, NULL);
+    g_list_free (index->groups);
+    index->groups = NULL;
+  }
+
+  if (index->writers) {
+    g_hash_table_foreach (index->writers, gst_index_free_writer, NULL);
+    g_hash_table_destroy (index->writers);
+    index->writers = NULL;
+  }
+}
+
+static void
 gst_index_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
@@ -470,6 +500,33 @@ gst_index_entry_copy (GstIndexEntry * entry)
 void
 gst_index_entry_free (GstIndexEntry * entry)
 {
+  switch (entry->type) {
+    case GST_INDEX_ENTRY_ID:
+      if (entry->data.id.description) {
+        g_free (entry->data.id.description);
+        entry->data.id.description = NULL;
+      }
+      break;
+    case GST_INDEX_ENTRY_ASSOCIATION:
+      if (entry->data.assoc.assocs) {
+        g_free (entry->data.assoc.assocs);
+        entry->data.assoc.assocs = NULL;
+      }
+      break;
+    case GST_INDEX_ENTRY_OBJECT:
+      if (entry->data.object.key) {
+        g_free (entry->data.object.key);
+        entry->data.object.key = NULL;
+      }
+      break;
+    case GST_INDEX_ENTRY_FORMAT:
+      if (entry->data.format.key) {
+        g_free (entry->data.format.key);
+        entry->data.format.key = NULL;
+      }
+      break;
+  }
+
   g_free (entry);
 }
 
index c6dd5d3..ab0992e 100644 (file)
@@ -66,6 +66,23 @@ G_BEGIN_DECLS
  */
 #define GST_VERSION_NANO (@PACKAGE_VERSION_NANO@)
 
+/**
+ * GST_CHECK_VERSION:
+ * @major: a number indicating the major version
+ * @minor: a number indicating the minor version
+ * @micro: a number indicating the micro version
+ *
+ * Check whether a GStreamer version equal to or greater than
+ * major.minor.micro is present.
+ *
+ * Since: 0.10.18
+ */
+#define        GST_CHECK_VERSION(major,minor,micro)    \
+    (GST_VERSION_MAJOR > (major) || \
+     (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR > (minor)) || \
+     (GST_VERSION_MAJOR == (major) && GST_VERSION_MINOR == (minor) && \
+      GST_VERSION_MICRO >= (micro)))
+
 G_END_DECLS
 
 #endif /* __GST_VERSION_H__ */
index adc2162..3bdc80d 100644 (file)
@@ -107,7 +107,7 @@ enum
 
 static void gst_mem_index_class_init (GstMemIndexClass * klass);
 static void gst_mem_index_init (GstMemIndex * index);
-static void gst_mem_index_dispose (GObject * object);
+static void gst_mem_index_finalize (GObject * object);
 
 static void gst_mem_index_add_entry (GstIndex * index, GstIndexEntry * entry);
 static GstIndexEntry *gst_mem_index_get_assoc_entry (GstIndex * index, gint id,
@@ -157,10 +157,11 @@ gst_mem_index_class_init (GstMemIndexClass * klass)
 
   parent_class = g_type_class_peek_parent (klass);
 
-  gobject_class->dispose = gst_mem_index_dispose;
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_mem_index_finalize);
 
-  gstindex_class->add_entry = gst_mem_index_add_entry;
-  gstindex_class->get_assoc_entry = gst_mem_index_get_assoc_entry;
+  gstindex_class->add_entry = GST_DEBUG_FUNCPTR (gst_mem_index_add_entry);
+  gstindex_class->get_assoc_entry =
+      GST_DEBUG_FUNCPTR (gst_mem_index_get_assoc_entry);
 }
 
 static void
@@ -173,11 +174,52 @@ gst_mem_index_init (GstMemIndex * index)
 }
 
 static void
-gst_mem_index_dispose (GObject * object)
+gst_mem_index_free_format (gpointer key, gpointer value, gpointer user_data)
 {
-  //GstMemIndex *memindex = GST_MEM_INDEX (object);
+  GstMemIndexFormatIndex *index = (GstMemIndexFormatIndex *) value;
 
-  G_OBJECT_CLASS (parent_class)->dispose (object);
+  if (index->tree) {
+    g_tree_destroy (index->tree);
+  }
+
+  g_free (index);
+}
+
+static void
+gst_mem_index_free_id (gpointer key, gpointer value, gpointer user_data)
+{
+  GstMemIndexId *id_index = (GstMemIndexId *) value;
+
+  if (id_index->format_index) {
+    g_hash_table_foreach (id_index->format_index, gst_mem_index_free_format,
+        NULL);
+    g_hash_table_destroy (id_index->format_index);
+    id_index->format_index = NULL;
+  }
+
+  g_free (id_index);
+}
+
+static void
+gst_mem_index_finalize (GObject * object)
+{
+  GstMemIndex *memindex = GST_MEM_INDEX (object);
+
+  /* Delete the trees referencing the associations first */
+  if (memindex->id_index) {
+    g_hash_table_foreach (memindex->id_index, gst_mem_index_free_id, NULL);
+    g_hash_table_destroy (memindex->id_index);
+    memindex->id_index = NULL;
+  }
+
+  /* Then delete the associations themselves */
+  if (memindex->associations) {
+    g_list_foreach (memindex->associations, (GFunc) gst_index_entry_free, NULL);
+    g_list_free (memindex->associations);
+    memindex->associations = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
index 5271307..2035c2b 100644 (file)
@@ -24,7 +24,7 @@
 /* #undef GST_GCOV_ENABLED */
 
 /* Default errorlevel to use */
-#define GST_LEVEL_DEFAULT GST_LEVEL_NONE
+#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR
 
 /* GStreamer license */
 #define GST_LICENSE "LGPL"
@@ -33,7 +33,7 @@
 #define GST_MAJORMINOR "0.10"
 
 /* package name in plugins */
-#define GST_PACKAGE_NAME "GStreamer source release"
+#define GST_PACKAGE_NAME "GStreamer CVS/prerelease"
 
 /* package origin */
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 0.10.17"
+#define PACKAGE_STRING "GStreamer 0.10.17.1"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "0.10.17"
+#define PACKAGE_VERSION "0.10.17.1"
 
 /* Define the plugin directory */
 #ifdef _DEBUG
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "0.10.17"
+#define VERSION "0.10.17.1"
 
 /* Define to 1 if your processor stores words with the most significant byte
    first (like Motorola and SPARC, unlike Intel and VAX). */