summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-02-16 13:33:12 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-02-16 13:33:12 +0000
commit232ea470f633f6b73df1b23c4047cb4c4ab94712 (patch)
tree6c63110eac96e1da1abdbedca4ef676622d5e60a
parent44addff581197729930b4f474f511af4bc2c8b51 (diff)
downloadgstreamer-plugins-base-232ea470f633f6b73df1b23c4047cb4c4ab94712.tar.gz
gst/playback/gstplaybin.c: Invert bin_add/link order to workaround deadlock in opt.
Original commit message from CVS: * gst/playback/gstplaybin.c: (add_sink): Invert bin_add/link order to workaround deadlock in opt.
-rw-r--r--ChangeLog5
-rw-r--r--gst/playback/gstplaybin.c8
2 files changed, 8 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 9f32f4c4a..5b2473c58 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-16 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+ * gst/playback/gstplaybin.c: (add_sink):
+ Invert bin_add/link order to workaround deadlock in opt.
+
2005-02-15 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* gst/modplug/gstmodplug.cc:
diff --git a/gst/playback/gstplaybin.c b/gst/playback/gstplaybin.c
index 85c8f9f6c..769abf620 100644
--- a/gst/playback/gstplaybin.c
+++ b/gst/playback/gstplaybin.c
@@ -692,14 +692,13 @@ add_sink (GstPlayBin * play_bin, GstElement * sink, GstPad * srcpad)
gboolean res;
/* we found a sink for this stream, now try to install it */
- gst_bin_add (GST_BIN (play_bin), sink);
+ sinkpad = gst_element_get_pad (sink, "sink");
+ res = gst_pad_link (srcpad, sinkpad);
GST_DEBUG ("Adding sink with state %d (parent: %d, peer: %d)\n",
GST_STATE (sink), GST_STATE (play_bin),
GST_STATE (gst_pad_get_parent (srcpad)));
- sinkpad = gst_element_get_pad (sink, "sink");
/* try to link the pad of the sink to the stream */
- res = gst_pad_link (srcpad, sinkpad);
if (!res) {
gchar *capsstr;
@@ -707,12 +706,11 @@ add_sink (GstPlayBin * play_bin, GstElement * sink, GstPad * srcpad)
capsstr = gst_caps_to_string (gst_pad_get_caps (srcpad));
g_warning ("could not link %s", capsstr);
g_free (capsstr);
- GST_LOG ("removing sink %p", sink);
- gst_bin_remove (GST_BIN (play_bin), sink);
} else {
/* we got the sink succesfully linked, now keep the sink
* in out internal list */
play_bin->sinks = g_list_prepend (play_bin->sinks, sink);
+ gst_bin_add (GST_BIN (play_bin), sink);
}
return res;