Index: gstplaybasebin.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst/playback/gstplaybasebin.c,v
retrieving revision 1.102
diff -u -p -r1.102 gstplaybasebin.c
--- gstplaybasebin.c	21 Feb 2006 12:16:16 -0000	1.102
+++ gstplaybasebin.c	17 Mar 2006 19:11:33 -0000
@@ -571,6 +571,13 @@ queue_out_of_data (GstElement * queue, G
   }
 }
 
+static void
+preroll_pad_block_cb (GstPad * pad, gboolean blocked, gpointer play_base_bin)
+{
+  GST_DEBUG_OBJECT (play_base_bin, "pad %s is now %s", GST_PAD_NAME (pad),
+      (blocked) ? "BLOCKED" : "UNBLOCKED");
+}
+
 /*
  * generate a preroll element which is simply a queue. While there
  * are still dynamic elements in the pipeline, we wait for one
@@ -651,6 +658,7 @@ gen_preroll_element (GstPlayBaseBin * pl
 
   /* listen for EOS */
   preroll_pad = gst_element_get_pad (preroll, "src");
+  gst_pad_set_blocked_async (preroll_pad, TRUE, preroll_pad_block_cb, NULL);
   gst_pad_add_event_probe (preroll_pad, G_CALLBACK (probe_triggered), info);
   gst_object_unref (preroll_pad);
 
@@ -811,7 +819,8 @@ probe_triggered (GstPad * pad, GstEvent 
   group = (GstPlayBaseGroup *) g_object_get_data (G_OBJECT (info), "group");
   play_base_bin = group->bin;
 
-  GST_DEBUG ("probe triggered");
+  GST_DEBUG ("probe triggered on pad %s:%s (%s event)",
+      GST_DEBUG_PAD_NAME (pad), GST_EVENT_TYPE_NAME (event));
 
   if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
     gint num_groups = 0;
Index: gstplaybin.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-base/gst/playback/gstplaybin.c,v
retrieving revision 1.81
diff -u -p -r1.81 gstplaybin.c
--- gstplaybin.c	18 Feb 2006 19:10:35 -0000	1.81
+++ gstplaybin.c	17 Mar 2006 19:11:35 -0000
@@ -1072,6 +1072,13 @@ subtitle_failed:
   }
 }
 
+static void
+preroll_pad_unblock_cb (GstPad * pad, gboolean blocked, gpointer play_bin)
+{
+  GST_DEBUG_OBJECT (play_bin, "pad %s is now %s", GST_PAD_NAME (pad),
+      (blocked) ? "BLOCKED" : "UNBLOCKED");
+}
+
 static gboolean
 setup_sinks (GstPlayBaseBin * play_base_bin, GstPlayBaseGroup * group)
 {
@@ -1122,6 +1129,9 @@ setup_sinks (GstPlayBaseBin * play_base_
     pad = gst_element_get_pad (group->type[GST_STREAM_TYPE_AUDIO - 1].preroll,
         "src");
     res = add_sink (play_bin, sink, pad, NULL);
+    GST_DEBUG_OBJECT (play_bin, "unblocking pad %s ...", GST_PAD_NAME (pad));
+    gst_pad_set_blocked_async (pad, FALSE, preroll_pad_unblock_cb, NULL);
+    GST_DEBUG_OBJECT (play_bin, "unblocked pad %s.", GST_PAD_NAME (pad));
     gst_object_unref (pad);
   }
 
@@ -1195,6 +1205,9 @@ setup_sinks (GstPlayBaseBin * play_base_
     pad = gst_element_get_pad (group->type[GST_STREAM_TYPE_VIDEO - 1].preroll,
         "src");
     res = add_sink (play_bin, sink, pad, textsrcpad);
+    GST_DEBUG_OBJECT (play_bin, "unblocking pad %s ...", GST_PAD_NAME (pad));
+    gst_pad_set_blocked_async (pad, FALSE, preroll_pad_unblock_cb, NULL);
+    GST_DEBUG_OBJECT (play_bin, "unblocked pad %s.", GST_PAD_NAME (pad));
     gst_object_unref (pad);
     if (textsrcpad) {
       gst_object_unref (textsrcpad);
