diff -rup a/gio/tests/gdbus-connection-slow.c b/gio/tests/gdbus-connection-slow.c
--- a/gio/tests/gdbus-connection-slow.c	2013-04-26 16:24:28.624839326 +0200
+++ b/gio/tests/gdbus-connection-slow.c	2013-04-26 19:14:32.578724970 +0200
@@ -115,6 +115,19 @@ test_connection_flush (void)
  * is fragmented when shoved across any transport
  */
 #define LARGE_MESSAGE_STRING_LENGTH (20*1024*1024)
+/* the test will fail if the service name has not appeared after this amount of seconds */
+#define LARGE_MESSAGE_TIMEOUT_SECONDS 10
+
+static gboolean
+large_message_timeout_cb (gpointer data)
+{
+  (void)data;
+
+  g_printerr ("Error: timeout waiting for dbus name to appear\n");
+  g_assert (FALSE == TRUE);
+
+  return FALSE;
+}
 
 static void
 large_message_on_name_appeared (GDBusConnection *connection,
@@ -128,6 +141,8 @@ large_message_on_name_appeared (GDBusCon
   GVariant *result;
   guint n;
 
+  g_assert (g_source_remove (GPOINTER_TO_UINT (user_data)));
+
   request = g_new (gchar, LARGE_MESSAGE_STRING_LENGTH + 1);
   for (n = 0; n < LARGE_MESSAGE_STRING_LENGTH; n++)
     request[n] = '0' + (n%10);
@@ -169,18 +184,23 @@ static void
 test_connection_large_message (void)
 {
   guint watcher_id;
+  guint timeout_id;
 
   session_bus_up ();
 
   /* this is safe; testserver will exit once the bus goes away */
   g_assert (g_spawn_command_line_async (SRCDIR "/gdbus-testserver.py", NULL));
 
+  timeout_id = g_timeout_add_seconds (LARGE_MESSAGE_TIMEOUT_SECONDS,
+                                      large_message_timeout_cb,
+                                      NULL);
+
   watcher_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
                                  "com.example.TestService",
                                  G_BUS_NAME_WATCHER_FLAGS_NONE,
                                  large_message_on_name_appeared,
                                  large_message_on_name_vanished,
-                                 NULL,  /* user_data */
+                                 GUINT_TO_POINTER (timeout_id), /* user_data */
                                  NULL); /* GDestroyNotify */
   g_main_loop_run (loop);
   g_bus_unwatch_name (watcher_id);
