diff options
author | Aleksey 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) |
commit | e493948ac25d425719ad70d45bb02aefc3e32e06 (patch) | |
tree | 84b63c93f9c9954ab7c465bb2610658e41dd1c71 | |
parent | 8647d1d6964f2fb5c7c57c80984859292b1196f1 (diff) |
Clean up on dispose
-rw-r--r-- | src/espeak.c | 3 | ||||
-rw-r--r-- | src/gstespeak.c | 52 |
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) { |