tools: Set pipeline to PAUSED before waiting for main loop idle
authorDavid Schleef <ds@schleef.org>
Tue, 2 Jun 2009 20:45:52 +0000 (13:45 -0700)
committerDavid Schleef <ds@schleef.org>
Tue, 2 Jun 2009 20:49:36 +0000 (13:49 -0700)
When it is shutting down a pipeline after ctrl-c, set pipeline to
paused before waiting for the main loop to complete all pending
transactions.  Fixes #584657.

If some part of the pipeline is generating signals or idle functions
at a fast rate, waiting for a main loop iteration may never return.

tools/gst-launch.c

index 3e69d21..9af4f04 100644 (file)
@@ -861,13 +861,14 @@ main (int argc, char *argv[])
       g_print (_("Execution ended after %" G_GUINT64_FORMAT " ns.\n"), diff);
     }
 
-    /* iterate mainloop to process pending stuff */
-    while (g_main_context_iteration (NULL, FALSE));
-
     PRINT (_("Setting pipeline to PAUSED ...\n"));
     gst_element_set_state (pipeline, GST_STATE_PAUSED);
     if (caught_error == ELR_NO_ERROR)
       gst_element_get_state (pipeline, &state, &pending, GST_CLOCK_TIME_NONE);
+
+    /* iterate mainloop to process pending stuff */
+    while (g_main_context_iteration (NULL, FALSE));
+
     PRINT (_("Setting pipeline to READY ...\n"));
     gst_element_set_state (pipeline, GST_STATE_READY);
     gst_element_get_state (pipeline, &state, &pending, GST_CLOCK_TIME_NONE);