diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-02-16 13:33:12 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-02-16 13:33:12 +0000 |
commit | 232ea470f633f6b73df1b23c4047cb4c4ab94712 (patch) | |
tree | 6c63110eac96e1da1abdbedca4ef676622d5e60a | |
parent | 44addff581197729930b4f474f511af4bc2c8b51 (diff) | |
download | gstreamer-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | gst/playback/gstplaybin.c | 8 |
2 files changed, 8 insertions, 5 deletions
@@ -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; |