device-monitor: fix device listing without --follow
authorMathieu Duponchelle <mathieu@centricular.com>
Mon, 30 Sep 2019 14:11:18 +0000 (16:11 +0200)
committerMathieu Duponchelle <mduponchelle1@gmail.com>
Mon, 30 Sep 2019 18:54:12 +0000 (18:54 +0000)
In !427, I removed the call to get_devices in order to always
print added devices from the bus handler, however this requires
the main loop to run until all pending messages have been consumed.

This commit achieves this by always running the main loop, and
simply adding an idle source to quit it in the non --follow case.

tools/gst-device-monitor.c

index 5765de4..2b802c3 100644 (file)
@@ -268,6 +268,13 @@ bus_msg_handler (GstBus * bus, GstMessage * msg, gpointer user_data)
   return TRUE;
 }
 
+static gboolean
+quit_loop (GMainLoop * loop)
+{
+  g_main_loop_quit (loop);
+  return G_SOURCE_REMOVE;
+}
+
 int
 main (int argc, char **argv)
 {
@@ -364,12 +371,16 @@ main (int argc, char **argv)
 
   GST_INFO ("Took %.2f seconds", g_timer_elapsed (timer, NULL));
 
-  if (follow) {
+  if (!follow) {
+    /* Consume all the messages pending on the bus and exit */
+    g_idle_add ((GSourceFunc) quit_loop, app.loop);
+  } else {
     g_print ("Monitoring devices, waiting for devices to be removed or "
         "new devices to be added...\n");
-    g_main_loop_run (app.loop);
   }
 
+  g_main_loop_run (app.loop);
+
   gst_device_monitor_stop (app.monitor);
   gst_object_unref (app.monitor);