From 4cf67a0834958d26d5db7734981af8108b87475d Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Mon, 1 Nov 2004 14:43:38 +0000 Subject: [PATCH] Fixes a bunch of problems with finalize and dispose functions, either assumptions that dispose is only called once, o... Original commit message from CVS: * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose), (gst_alsa_finalize): * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init), (gst_cdaudio_finalize): * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init), (cdparanoia_finalize): * ext/divx/gstdivxdec.c: (gst_divxdec_dispose): * ext/divx/gstdivxenc.c: (gst_divxenc_dispose): * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init), (dvdreadsrc_finalize): * ext/flac/gstflacdec.c: (gst_flacdec_class_init), (gst_flacdec_finalize): * ext/flac/gstflacenc.c: (gst_flacenc_class_init), (gst_flacenc_finalize): * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init), (gst_gnomevfssink_finalize): * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init), (gst_gnomevfssrc_finalize): * ext/libfame/gstlibfame.c: (gst_fameenc_class_init), (gst_fameenc_finalize): * ext/nas/nassink.c: (gst_nassink_class_init), (gst_nassink_finalize): * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize), (gst_sdlvideosink_class_init): * ext/sndfile/gstsf.c: (gst_sf_dispose): * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose): * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose): * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose): * gst-libs/gst/xwindowlistener/xwindowlistener.c: (gst_x_window_listener_dispose): * gst/audioscale/gstaudioscale.c: * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init), (play_on_demand_finalize): * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose): * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): * sys/cdrom/gstcdplayer.c: (cdplayer_class_init), (cdplayer_finalize): * sys/glsink/glimagesink.c: (gst_glimagesink_finalize), (gst_glimagesink_class_init): * sys/oss/gstosselement.c: (gst_osselement_class_init), (gst_osselement_finalize): * sys/oss/gstosssink.c: (gst_osssink_dispose): * sys/oss/gstosssrc.c: (gst_osssrc_dispose): * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose): Fixes a bunch of problems with finalize and dispose functions, either assumptions that dispose is only called once, or not calling the parent class dispose/finalize function --- ChangeLog | 49 +++++++++++++++++++ ext/alsa/gstalsa.c | 17 +++++-- ext/cdparanoia/gstcdparanoia.c | 12 ++--- ext/gnomevfs/gstgnomevfssink.c | 8 +-- ext/gnomevfs/gstgnomevfssrc.c | 8 +-- gst-libs/gst/interfaces/mixertrack.c | 4 +- gst-libs/gst/interfaces/tunerchannel.c | 4 +- gst-libs/gst/interfaces/tunernorm.c | 4 +- gst-libs/gst/mixer/mixertrack.c | 4 +- gst-libs/gst/tuner/tunerchannel.c | 4 +- gst-libs/gst/tuner/tunernorm.c | 4 +- .../gst/xwindowlistener/xwindowlistener.c | 1 + gst/audioscale/gstaudioscale.c | 5 +- gst/videoscale/gstvideoscale.c | 2 +- sys/v4l/gstv4lelement.c | 1 + 15 files changed, 102 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b6aaad27f..8c8d033aad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,52 @@ +2004-11-02 Jan Schmidt + * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose), + (gst_alsa_finalize): + * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init), + (gst_cdaudio_finalize): + * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init), + (cdparanoia_finalize): + * ext/divx/gstdivxdec.c: (gst_divxdec_dispose): + * ext/divx/gstdivxenc.c: (gst_divxenc_dispose): + * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init), + (dvdreadsrc_finalize): + * ext/flac/gstflacdec.c: (gst_flacdec_class_init), + (gst_flacdec_finalize): + * ext/flac/gstflacenc.c: (gst_flacenc_class_init), + (gst_flacenc_finalize): + * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init), + (gst_gnomevfssink_finalize): + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init), + (gst_gnomevfssrc_finalize): + * ext/libfame/gstlibfame.c: (gst_fameenc_class_init), + (gst_fameenc_finalize): + * ext/nas/nassink.c: (gst_nassink_class_init), + (gst_nassink_finalize): + * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize), + (gst_sdlvideosink_class_init): + * ext/sndfile/gstsf.c: (gst_sf_dispose): + * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose): + * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose): + * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose): + * gst-libs/gst/xwindowlistener/xwindowlistener.c: + (gst_x_window_listener_dispose): + * gst/audioscale/gstaudioscale.c: + * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init), + (play_on_demand_finalize): + * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose): + * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): + * sys/cdrom/gstcdplayer.c: (cdplayer_class_init), + (cdplayer_finalize): + * sys/glsink/glimagesink.c: (gst_glimagesink_finalize), + (gst_glimagesink_class_init): + * sys/oss/gstosselement.c: (gst_osselement_class_init), + (gst_osselement_finalize): + * sys/oss/gstosssink.c: (gst_osssink_dispose): + * sys/oss/gstosssrc.c: (gst_osssrc_dispose): + * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose): + Fixes a bunch of problems with finalize and dispose functions, + either assumptions that dispose is only called once, or not calling + the parent class dispose/finalize function + 2004-11-01 Stefan Kost * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link): diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c index e2d125501b..db94898222 100644 --- a/ext/alsa/gstalsa.c +++ b/ext/alsa/gstalsa.c @@ -51,6 +51,7 @@ static void gst_alsa_class_init (gpointer g_class, gpointer class_data); static void gst_alsa_init (GstAlsa * this); static void gst_alsa_dispose (GObject * object); +static void gst_alsa_finalize (GObject * object); static void gst_alsa_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_alsa_get_property (GObject * object, @@ -161,6 +162,7 @@ gst_alsa_class_init (gpointer g_class, gpointer class_data) parent_class = g_type_class_ref (GST_TYPE_ELEMENT); object_class->dispose = gst_alsa_dispose; + object_class->finalize = gst_alsa_finalize; object_class->get_property = gst_alsa_get_property; object_class->set_property = gst_alsa_set_property; @@ -218,14 +220,23 @@ gst_alsa_dispose (GObject * object) { GstAlsa *this = GST_ALSA (object); - g_free (this->device); - - if (this->clock) + if (this->clock) { gst_object_unparent (GST_OBJECT (this->clock)); + this->clock = NULL; + } G_OBJECT_CLASS (parent_class)->dispose (object); } +static void +gst_alsa_finalize (GObject * object) +{ + GstAlsa *this = GST_ALSA (object); + + g_free (this->device); + G_OBJECT_CLASS (parent_class)->finalize (object); +} + static void gst_alsa_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) diff --git a/ext/cdparanoia/gstcdparanoia.c b/ext/cdparanoia/gstcdparanoia.c index 27462fefc7..1da0eb3925 100644 --- a/ext/cdparanoia/gstcdparanoia.c +++ b/ext/cdparanoia/gstcdparanoia.c @@ -138,7 +138,7 @@ enum static void cdparanoia_base_init (gpointer g_class); static void cdparanoia_class_init (CDParanoiaClass * klass); static void cdparanoia_init (CDParanoia * cdparanoia); -static void cdparanoia_dispose (GObject * obj); +static void cdparanoia_finalize (GObject * obj); static void cdparanoia_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -279,7 +279,7 @@ cdparanoia_class_init (CDParanoiaClass * klass) gobject_class->set_property = cdparanoia_set_property; gobject_class->get_property = cdparanoia_get_property; - gobject_class->dispose = cdparanoia_dispose; + gobject_class->finalize = cdparanoia_finalize; gstelement_class->change_state = cdparanoia_change_state; gstelement_class->set_index = cdparanoia_set_index; @@ -324,16 +324,14 @@ cdparanoia_init (CDParanoia * cdparanoia) } static void -cdparanoia_dispose (GObject * obj) +cdparanoia_finalize (GObject * obj) { - CDParanoia *cdparanoia; - - cdparanoia = CDPARANOIA (obj); + CDParanoia *cdparanoia = CDPARANOIA (obj); g_free (cdparanoia->uri); cdparanoia->uri = NULL; - G_OBJECT_CLASS (parent_class)->dispose (obj); + G_OBJECT_CLASS (parent_class)->finalize (obj); } static void diff --git a/ext/gnomevfs/gstgnomevfssink.c b/ext/gnomevfs/gstgnomevfssink.c index d64493172f..3c3280f6d1 100644 --- a/ext/gnomevfs/gstgnomevfssink.c +++ b/ext/gnomevfs/gstgnomevfssink.c @@ -102,7 +102,7 @@ enum static void gst_gnomevfssink_base_init (gpointer g_class); static void gst_gnomevfssink_class_init (GstGnomeVFSSinkClass * klass); static void gst_gnomevfssink_init (GstGnomeVFSSink * gnomevfssink); -static void gst_gnomevfssink_dispose (GObject * obj); +static void gst_gnomevfssink_finalize (GObject * obj); static void gst_gnomevfssink_uri_handler_init (gpointer g_iface, gpointer iface_data); @@ -212,7 +212,7 @@ gst_gnomevfssink_class_init (GstGnomeVFSSinkClass * klass) gobject_class->set_property = gst_gnomevfssink_set_property; gobject_class->get_property = gst_gnomevfssink_get_property; - gobject_class->dispose = gst_gnomevfssink_dispose; + gobject_class->finalize = gst_gnomevfssink_finalize; gstelement_class->change_state = gst_gnomevfssink_change_state; @@ -222,7 +222,7 @@ gst_gnomevfssink_class_init (GstGnomeVFSSinkClass * klass) } static void -gst_gnomevfssink_dispose (GObject * obj) +gst_gnomevfssink_finalize (GObject * obj) { GstGnomeVFSSink *sink = GST_GNOMEVFSSINK (obj); @@ -235,6 +235,8 @@ gst_gnomevfssink_dispose (GObject * obj) g_free (sink->uri_name); sink->uri_name = NULL; } + + G_OBJECT_CLASS (parent_class)->finalize (obj); } static void diff --git a/ext/gnomevfs/gstgnomevfssrc.c b/ext/gnomevfs/gstgnomevfssrc.c index 70907eae1e..7104b97c4b 100644 --- a/ext/gnomevfs/gstgnomevfssrc.c +++ b/ext/gnomevfs/gstgnomevfssrc.c @@ -200,7 +200,7 @@ enum static void gst_gnomevfssrc_base_init (gpointer g_class); static void gst_gnomevfssrc_class_init (GstGnomeVFSSrcClass * klass); static void gst_gnomevfssrc_init (GstGnomeVFSSrc * gnomevfssrc); -static void gst_gnomevfssrc_dispose (GObject * object); +static void gst_gnomevfssrc_finalize (GObject * object); static void gst_gnomevfssrc_uri_handler_init (gpointer g_iface, gpointer iface_data); @@ -284,7 +284,7 @@ gst_gnomevfssrc_class_init (GstGnomeVFSSrcClass * klass) "bytesperread", ARG_BYTESPERREAD, G_PARAM_READWRITE, "location", ARG_LOCATION, G_PARAM_READWRITE, NULL); - gobject_class->dispose = gst_gnomevfssrc_dispose; + gobject_class->finalize = gst_gnomevfssrc_finalize; g_object_class_install_property (gobject_class, ARG_HANDLE, @@ -381,7 +381,7 @@ gst_gnomevfssrc_init (GstGnomeVFSSrc * gnomevfssrc) } static void -gst_gnomevfssrc_dispose (GObject * object) +gst_gnomevfssrc_finalize (GObject * object) { GstGnomeVFSSrc *src = GST_GNOMEVFSSRC (object); @@ -407,7 +407,7 @@ gst_gnomevfssrc_dispose (GObject * object) g_mutex_free (src->audiocast_udpdata_mutex); g_mutex_free (src->audiocast_queue_mutex); - G_OBJECT_CLASS (parent_class)->dispose (object); + G_OBJECT_CLASS (parent_class)->finalize (object); } static guint diff --git a/gst-libs/gst/interfaces/mixertrack.c b/gst-libs/gst/interfaces/mixertrack.c index ea531d5f3b..36ce288d4a 100644 --- a/gst-libs/gst/interfaces/mixertrack.c +++ b/gst-libs/gst/interfaces/mixertrack.c @@ -183,8 +183,10 @@ gst_mixer_track_dispose (GObject * object) { GstMixerTrack *channel = GST_MIXER_TRACK (object); - if (channel->label) + if (channel->label) { g_free (channel->label); + channel->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/interfaces/tunerchannel.c b/gst-libs/gst/interfaces/tunerchannel.c index de0be2e433..1826a3e27b 100644 --- a/gst-libs/gst/interfaces/tunerchannel.c +++ b/gst-libs/gst/interfaces/tunerchannel.c @@ -104,8 +104,10 @@ gst_tuner_channel_dispose (GObject * object) { GstTunerChannel *channel = GST_TUNER_CHANNEL (object); - if (channel->label) + if (channel->label) { g_free (channel->label); + channel->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/interfaces/tunernorm.c b/gst-libs/gst/interfaces/tunernorm.c index 8fb98db7d4..2eb973de8d 100644 --- a/gst-libs/gst/interfaces/tunernorm.c +++ b/gst-libs/gst/interfaces/tunernorm.c @@ -88,8 +88,10 @@ gst_tuner_norm_dispose (GObject * object) { GstTunerNorm *norm = GST_TUNER_NORM (object); - if (norm->label) + if (norm->label) { g_free (norm->label); + norm->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/mixer/mixertrack.c b/gst-libs/gst/mixer/mixertrack.c index ea531d5f3b..36ce288d4a 100644 --- a/gst-libs/gst/mixer/mixertrack.c +++ b/gst-libs/gst/mixer/mixertrack.c @@ -183,8 +183,10 @@ gst_mixer_track_dispose (GObject * object) { GstMixerTrack *channel = GST_MIXER_TRACK (object); - if (channel->label) + if (channel->label) { g_free (channel->label); + channel->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/tuner/tunerchannel.c b/gst-libs/gst/tuner/tunerchannel.c index de0be2e433..1826a3e27b 100644 --- a/gst-libs/gst/tuner/tunerchannel.c +++ b/gst-libs/gst/tuner/tunerchannel.c @@ -104,8 +104,10 @@ gst_tuner_channel_dispose (GObject * object) { GstTunerChannel *channel = GST_TUNER_CHANNEL (object); - if (channel->label) + if (channel->label) { g_free (channel->label); + channel->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/tuner/tunernorm.c b/gst-libs/gst/tuner/tunernorm.c index 8fb98db7d4..2eb973de8d 100644 --- a/gst-libs/gst/tuner/tunernorm.c +++ b/gst-libs/gst/tuner/tunernorm.c @@ -88,8 +88,10 @@ gst_tuner_norm_dispose (GObject * object) { GstTunerNorm *norm = GST_TUNER_NORM (object); - if (norm->label) + if (norm->label) { g_free (norm->label); + norm->label = NULL; + } if (parent_class->dispose) parent_class->dispose (object); diff --git a/gst-libs/gst/xwindowlistener/xwindowlistener.c b/gst-libs/gst/xwindowlistener/xwindowlistener.c index 9963535c2b..ebbc9ac606 100644 --- a/gst-libs/gst/xwindowlistener/xwindowlistener.c +++ b/gst-libs/gst/xwindowlistener/xwindowlistener.c @@ -96,6 +96,7 @@ gst_x_window_listener_dispose (GObject * object) if (xwin->display_name) { g_free (xwin->display_name); + xwin->display_name = NULL; } if (parent_class->dispose) { diff --git a/gst/audioscale/gstaudioscale.c b/gst/audioscale/gstaudioscale.c index 8daac6d296..71f084166a 100644 --- a/gst/audioscale/gstaudioscale.c +++ b/gst/audioscale/gstaudioscale.c @@ -588,9 +588,12 @@ static void gst_audioscale_dispose (GObject * object) if (audioscale->gst_resample) { g_free (audioscale->gst_resample); + audioscale->gst_resample = NULL; } - if (audioscale->offsets) + if (audioscale->offsets) { g_free (audioscale->offsets); + audioscale->offsets = NULL; + } G_OBJECT_CLASS (parent_class)->dispose (object); } diff --git a/gst/videoscale/gstvideoscale.c b/gst/videoscale/gstvideoscale.c index 0903b61b3c..403711d34d 100644 --- a/gst/videoscale/gstvideoscale.c +++ b/gst/videoscale/gstvideoscale.c @@ -551,7 +551,7 @@ gst_videoscale_chain (GstPad * pad, GstData * _data) outbuf = gst_pad_alloc_buffer (videoscale->srcpad, GST_BUFFER_OFFSET_NONE, videoscale->to_buf_size); - GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); + gst_buffer_stamp (outbuf, buf); g_return_if_fail (videoscale->format); GST_LOG_OBJECT (videoscale, "format " GST_FOURCC_FORMAT, diff --git a/sys/v4l/gstv4lelement.c b/sys/v4l/gstv4lelement.c index 7bddc96f93..19db2e86e3 100644 --- a/sys/v4l/gstv4lelement.c +++ b/sys/v4l/gstv4lelement.c @@ -412,6 +412,7 @@ gst_v4lelement_dispose (GObject * object) if (v4lelement->videodev) { g_free (v4lelement->videodev); + v4lelement->videodev = NULL; } if (((GObjectClass *) parent_class)->dispose)