Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-02-05 06:56:38 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-02-05 06:56:38 (GMT)
commite493948ac25d425719ad70d45bb02aefc3e32e06 (patch)
tree84b63c93f9c9954ab7c465bb2610658e41dd1c71
parent8647d1d6964f2fb5c7c57c80984859292b1196f1 (diff)
Clean up on dispose
-rw-r--r--src/espeak.c3
-rw-r--r--src/gstespeak.c52
2 files changed, 34 insertions, 21 deletions
diff --git a/src/espeak.c b/src/espeak.c
index 7e7236d..4594784 100644
--- a/src/espeak.c
+++ b/src/espeak.c
@@ -142,7 +142,8 @@ espeak_hear(struct Espeak *es, goffset offset, guint *size)
void
espeak_unref(struct Espeak *es)
{
- g_free(es->buffer);
+ g_output_stream_close(es->buffer, NULL, NULL);
+ g_object_unref(es->buffer);
es->buffer = 0;
g_free(es);
}
diff --git a/src/gstespeak.c b/src/gstespeak.c
index 811ad25..ea69f1d 100644
--- a/src/gstespeak.c
+++ b/src/gstespeak.c
@@ -94,6 +94,7 @@ static gboolean gst_espeak_src_do_seek (GstBaseSrc*, GstSegment*);
static gboolean gst_espeak_src_check_get_range (GstBaseSrc*);
static gboolean gst_espeak_src_do_get_size (GstBaseSrc*, guint64*);
+static void gst_espeak_src_dispose (GObject * gobject);
static void gst_espeak_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_espeak_get_property (GObject * object, guint prop_id,
@@ -120,26 +121,27 @@ gst_espeak_base_init (gpointer gclass)
static void
gst_espeak_class_init (GstEspeakClass * klass)
{
- GObjectClass *gobject_class = (GObjectClass *) klass;
- GstBaseSrcClass *basesrc_class = (GstBaseSrcClass *) klass;
-
- basesrc_class->create = gst_espeak_src_create;
- basesrc_class->start = gst_espeak_src_start;
- basesrc_class->stop = gst_espeak_src_stop;
- basesrc_class->stop = gst_espeak_src_stop;
- basesrc_class->is_seekable = gst_espeak_src_is_seekable;
- basesrc_class->unlock = gst_espeak_src_unlock;
- basesrc_class->unlock_stop = gst_espeak_src_unlock_stop;
- basesrc_class->do_seek = gst_espeak_src_do_seek;
- basesrc_class->check_get_range = gst_espeak_src_check_get_range;
- basesrc_class->get_size = gst_espeak_src_do_get_size;
-
- gobject_class->set_property = gst_espeak_set_property;
- gobject_class->get_property = gst_espeak_get_property;
-
- g_object_class_install_property (gobject_class, PROP_SILENT,
- g_param_spec_boolean ("silent", "Silent", "Produce verbose output ?",
- FALSE, G_PARAM_READWRITE));
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstBaseSrcClass *basesrc_class = (GstBaseSrcClass *) klass;
+
+ basesrc_class->create = gst_espeak_src_create;
+ basesrc_class->start = gst_espeak_src_start;
+ basesrc_class->stop = gst_espeak_src_stop;
+ basesrc_class->stop = gst_espeak_src_stop;
+ basesrc_class->is_seekable = gst_espeak_src_is_seekable;
+ basesrc_class->unlock = gst_espeak_src_unlock;
+ basesrc_class->unlock_stop = gst_espeak_src_unlock_stop;
+ basesrc_class->do_seek = gst_espeak_src_do_seek;
+ basesrc_class->check_get_range = gst_espeak_src_check_get_range;
+ basesrc_class->get_size = gst_espeak_src_do_get_size;
+
+ gobject_class->dispose = gst_espeak_src_dispose;
+ gobject_class->set_property = gst_espeak_set_property;
+ gobject_class->get_property = gst_espeak_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_SILENT,
+ g_param_spec_boolean ("silent", "Silent", "Produce verbose output ?",
+ FALSE, G_PARAM_READWRITE));
}
/* initialize the new element
@@ -155,6 +157,16 @@ gst_espeak_init (GstEspeak * self,
}
static void
+gst_espeak_src_dispose(GObject * self_)
+{
+ GstEspeak *self = (GstEspeak*)self_;
+ espeak_unref(self->speak);
+ self->speak = NULL;
+
+ G_OBJECT_CLASS(parent_class)->dispose(self_);
+}
+
+static void
gst_espeak_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{