Fixes a bunch of problems with finalize and dispose functions, either assumptions...
authorJan Schmidt <thaytan@mad.scientist.com>
Mon, 1 Nov 2004 14:43:38 +0000 (14:43 +0000)
committerJan Schmidt <thaytan@mad.scientist.com>
Mon, 1 Nov 2004 14:43:38 +0000 (14:43 +0000)
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

15 files changed:
ChangeLog
ext/alsa/gstalsa.c
ext/cdparanoia/gstcdparanoia.c
ext/gnomevfs/gstgnomevfssink.c
ext/gnomevfs/gstgnomevfssrc.c
gst-libs/gst/interfaces/mixertrack.c
gst-libs/gst/interfaces/tunerchannel.c
gst-libs/gst/interfaces/tunernorm.c
gst-libs/gst/mixer/mixertrack.c
gst-libs/gst/tuner/tunerchannel.c
gst-libs/gst/tuner/tunernorm.c
gst-libs/gst/xwindowlistener/xwindowlistener.c
gst/audioscale/gstaudioscale.c
gst/videoscale/gstvideoscale.c
sys/v4l/gstv4lelement.c

index 0b6aaad..8c8d033 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,52 @@
+2004-11-02  Jan Schmidt  <thaytan@mad.scientist.com>
+       * 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  <ensonic@users.sf.net>
 
        * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link):
index e2d1255..db94898 100644 (file)
@@ -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,15 +220,24 @@ 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)
 {
index 27462fe..1da0eb3 100644 (file)
@@ -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
index d644931..3c3280f 100644 (file)
@@ -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
index 70907ea..7104b97 100644 (file)
@@ -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
index ea531d5..36ce288 100644 (file)
@@ -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);
index de0be2e..1826a3e 100644 (file)
@@ -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);
index 8fb98db..2eb973d 100644 (file)
@@ -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);
index ea531d5..36ce288 100644 (file)
@@ -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);
index de0be2e..1826a3e 100644 (file)
@@ -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);
index 8fb98db..2eb973d 100644 (file)
@@ -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);
index 9963535..ebbc9ac 100644 (file)
@@ -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) {
index 8daac6d..71f0841 100644 (file)
@@ -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);
 }
 
index 0903b61..403711d 100644 (file)
@@ -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,
index 7bddc96..19db2e8 100644 (file)
@@ -412,6 +412,7 @@ gst_v4lelement_dispose (GObject * object)
 
   if (v4lelement->videodev) {
     g_free (v4lelement->videodev);
+    v4lelement->videodev = NULL;
   }
 
   if (((GObjectClass *) parent_class)->dispose)