playbin: Make sure to keep a reference on the volume element
authorJosep Torra Valles <n770galaxy@gmail.com>
Sat, 31 Oct 2009 13:02:40 +0000 (14:02 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 2 Nov 2009 06:30:54 +0000 (07:30 +0100)
Fixes null pointer dereferences under certain circumstances.

Fixes bug #595401.

gst/playback/gstplaybin.c

index a505aa0..8d8ae29 100644 (file)
@@ -1127,7 +1127,7 @@ gen_audio_element (GstPlayBin * play_bin)
   if (volume == NULL)
     goto no_volume;
   g_object_set (G_OBJECT (volume), "volume", play_bin->volume, NULL);
-  play_bin->volume_element = volume;
+  play_bin->volume_element = GST_ELEMENT_CAST (gst_object_ref (volume));
   gst_bin_add (GST_BIN_CAST (element), volume);
 
   res = gst_element_link_pads (conv, "src", scale, "sink");
@@ -1442,6 +1442,11 @@ remove_sinks (GstPlayBin * play_bin)
     gst_object_unref (play_bin->textoverlay_element);
     play_bin->textoverlay_element = NULL;
   }
+
+  if (play_bin->volume_element) {
+    gst_object_unref (play_bin->volume_element);
+    play_bin->volume_element = NULL;
+  }
 }
 
 /* loop over the streams and set up the pipeline to play this