multihandlesink: Warn if trying to change the state from the streaming thread
authorSebastian Dröge <sebastian@centricular.com>
Thu, 5 May 2016 10:16:57 +0000 (13:16 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 5 May 2016 10:17:53 +0000 (13:17 +0300)
Instead of silently returning GST_STATE_CHANGE_FAILURE.

gst/tcp/gstmultihandlesink.c

index d17cd43..f060f0e 100644 (file)
@@ -2221,9 +2221,16 @@ gst_multi_handle_sink_change_state (GstElement * element,
   sink = GST_MULTI_HANDLE_SINK (element);
 
   /* we disallow changing the state from the streaming thread */
-  if (g_thread_self () == sink->thread)
-    return GST_STATE_CHANGE_FAILURE;
+  if (g_thread_self () == sink->thread) {
+    g_warning
+        ("\nTrying to change %s's state from its streaming thread would deadlock.\n"
+        "You cannot change the state of an element from its streaming\n"
+        "thread. Use g_idle_add() or post a GstMessage on the bus to\n"
+        "schedule the state change from the main thread.\n",
+        GST_ELEMENT_NAME (sink));
 
+    return GST_STATE_CHANGE_FAILURE;
+  }
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY: