Index: gst/gstbus.c
===================================================================
RCS file: /cvs/gstreamer/gstreamer/gst/gstbus.c,v
retrieving revision 1.51
diff -u -u -r1.51 gstbus.c
--- gst/gstbus.c	20 Jan 2006 19:01:59 -0000	1.51
+++ gst/gstbus.c	10 Feb 2006 15:44:49 -0000
@@ -100,6 +100,10 @@
 /* the context we wakeup when we posted a message on the bus */
 static GMainContext *main_context;
 
+struct _GstBusPrivate {
+  guint num_sync_message_emitters;
+};
+
 GType
 gst_bus_get_type (void)
 {
@@ -199,6 +203,8 @@
       marshal_VOID__MINIOBJECT, G_TYPE_NONE, 1, GST_TYPE_MESSAGE);
 
   main_context = g_main_context_default ();
+
+  g_type_class_add_private (klass, sizeof(GstBusPrivate));
 }
 
 static void
@@ -207,6 +213,8 @@
   bus->queue = g_queue_new ();
   bus->queue_lock = g_mutex_new ();
 
+  bus->priv = G_TYPE_INSTANCE_GET_PRIVATE (bus, GST_TYPE_BUS, GstBusPrivate);
+
   GST_DEBUG_OBJECT (bus, "created");
 }
 
@@ -301,6 +309,7 @@
 {
   GstBusSyncReply reply = GST_BUS_PASS;
   GstBusSyncHandler handler;
+  gboolean emit_sync_message;
   gpointer handler_data;
 
   g_return_val_if_fail (GST_IS_BUS (bus), FALSE);
@@ -316,12 +325,19 @@
 
   handler = bus->sync_handler;
   handler_data = bus->sync_handler_data;
+  emit_sync_message = bus->priv->num_sync_message_emitters > 0;
   GST_OBJECT_UNLOCK (bus);
 
   /* first call the sync handler if it is installed */
   if (handler)
     reply = handler (bus, message, handler_data);
 
+  /* emit sync-message if requested to do so via
+     gst_bus_enable_sync_message_emission. terrible but effective */
+  if (emit_sync_message && reply != GST_BUS_DROP
+      && handler != gst_bus_sync_signal_handler)
+    gst_bus_sync_signal_handler (bus, message, NULL);
+
   /* now see what we should do with the message */
   switch (reply) {
     case GST_BUS_DROP:
@@ -905,6 +921,71 @@
 }
 
 /**
+ * gst_bus_enable_sync_message_emission:
+ * @bus: a #GstBus on which you want to receive the "sync-message" signal
+ *
+ * Instructs GStreamer to emit the sync-message signal after running the bus's
+ * sync handler. This function is here so that code can ensure that they can
+ * synchronously receive messages without having to affect what the bin's sync
+ * handler is. 
+ *
+ * This function may be called multiple times. To clean up, the caller is
+ * responsible for calling gst_bus_disable_sync_message_emission() as many times
+ * as this function is called.
+ *
+ * While this function looks similar to gst_bus_add_signal_watch(), it is not
+ * exactly the same -- this function enables <i>synchronous</i> emission of
+ * signals when messages arrive; gst_bus_add_signal_watch adds an idle callback
+ * to pop messages off the bus <i>asynchronously</a>. The sync-message signal
+ * comes from the thread of whatever object posted the message; the message
+ * signal is marshalled to the main thread via the main loop.
+ *
+ * MT safe.
+ */
+void
+gst_bus_enable_sync_message_emission (GstBus * bus)
+{
+  g_return_if_fail (GST_IS_BUS (bus));
+
+  GST_OBJECT_LOCK (bus);
+
+  bus->priv->num_sync_message_emitters++;
+
+  GST_OBJECT_UNLOCK (bus);
+}
+
+/**
+ * gst_bus_disable_sync_message_emission:
+ * @bus: a #GstBus on which you previously called
+ * gst_bus_enable_sync_message_emission()
+ *
+ * Instructs GStreamer to stop emitting the sync-message signal for this bus.
+ * See gst_bus_enable_sync_message_emission() for more information.
+ *
+ * In the event that multiple pieces of code have called
+ * gst_bus_enable_sync_message_emission(), the sync-message emissions will only
+ * be stopped after all calls to gst_bus_enable_sync_message_emission() were
+ * "cancelled" by calling this function. In this way the semantics are exactly
+ * the same as gst_object_ref(); that which calls enable should also call
+ * disable.
+ *
+ * MT safe.
+ */
+void
+gst_bus_disable_sync_message_emission (GstBus * bus)
+{
+  g_return_if_fail (GST_IS_BUS (bus));
+
+  g_return_if_fail (bus->num_signal_watchers == 0);
+
+  GST_OBJECT_LOCK (bus);
+
+  bus->priv->num_sync_message_emitters--;
+
+  GST_OBJECT_UNLOCK (bus);
+}
+
+/**
  * gst_bus_add_signal_watch_full:
  * @bus: a #GstBus on which you want to receive the "message" signal
  * @priority: The priority of the watch.
Index: gst/gstbus.h
===================================================================
RCS file: /cvs/gstreamer/gstreamer/gst/gstbus.h,v
retrieving revision 1.19
diff -u -u -r1.19 gstbus.h
--- gst/gstbus.h	20 Jan 2006 19:01:59 -0000	1.19
+++ gst/gstbus.h	10 Feb 2006 15:44:49 -0000
@@ -23,6 +23,7 @@
 #define __GST_BUS_H__
 
 typedef struct _GstBus GstBus;
+typedef struct _GstBusPrivate GstBusPrivate;
 typedef struct _GstBusClass GstBusClass;
 
 #include <gst/gstmessage.h>
@@ -121,7 +122,8 @@
   guint             num_signal_watchers;
 
   /*< private > */
-  gpointer _gst_reserved[GST_PADDING];
+  GstBusPrivate    *priv;
+  gpointer _gst_reserved[GST_PADDING - 1];
 };
 
 struct _GstBusClass
@@ -176,6 +178,9 @@
 void 			gst_bus_add_signal_watch_full 	(GstBus * bus, gint priority);
 void 			gst_bus_remove_signal_watch 	(GstBus * bus);
 
+void			gst_bus_enable_sync_message_emission (GstBus * bus);
+void			gst_bus_disable_sync_message_emission (GstBus * bus);
+
 G_END_DECLS
 
 #endif /* __GST_BUS_H__ */
Index: win32/common/config.h
===================================================================
RCS file: /cvs/gstreamer/gstreamer/win32/common/config.h,v
retrieving revision 1.36
diff -u -u -r1.36 config.h
--- win32/common/config.h	8 Feb 2006 17:31:34 -0000	1.36
+++ win32/common/config.h	10 Feb 2006 15:44:50 -0000
@@ -21,7 +21,7 @@
 #undef GST_GCOV_ENABLED
 
 /* Default errorlevel to use */
-#define GST_LEVEL_DEFAULT GST_LEVEL_NONE
+#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR
 
 /* GStreamer license */
 #define GST_LICENSE "LGPL"
@@ -30,16 +30,16 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* package name in plugins */
-#define GST_PACKAGE_NAME "GStreamer source release"
+#define GST_PACKAGE_NAME "GStreamer CVS/prerelease"
 
 /* Define the version */
-#define GST_VERSION "0.10.3"
+#define GST_VERSION "0.10.3.1"
 
 /* Define the MAJOR.MINOR version */
 #define GST_MAJORMINOR "0.10"
 
 /* Define host CPU */
-#define HOST_CPU "i686"
+#define HOST_CPU "powerpc"
 
 /* Define if the host CPU is an Alpha */
 #undef HAVE_CPU_ALPHA
@@ -216,7 +216,7 @@
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "0.10.3"
+#define VERSION "0.10.3.1"
 
 /* Define to 1 if your processor stores words with the most significant byte
    first (like Motorola and SPARC, unlike Intel and VAX). */
