[PATCH 2/3] mbim-proxy: Exit when all devices are removed

Greg Suarez gpsuarez2512 at gmail.com
Wed Jul 23 14:21:24 PDT 2014


Exit when all devices are removed instead of when there are no clients
connected.  This is done to allow for --no-close and --no-open options
in mbimcli.
---
 src/mbim-proxy/mbim-proxy.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/mbim-proxy/mbim-proxy.c b/src/mbim-proxy/mbim-proxy.c
index c65fe3c..5e330eb 100644
--- a/src/mbim-proxy/mbim-proxy.c
+++ b/src/mbim-proxy/mbim-proxy.c
@@ -42,6 +42,7 @@
 static GMainLoop *loop;
 static MbimProxy *proxy;
 static guint timeout_id;
+static guint client_connected_once = FALSE;
 
 /* Main options */
 static gboolean verbose_flag;
@@ -147,6 +148,10 @@ stop_loop_cb (void)
 static void
 proxy_n_clients_changed (MbimProxy *_proxy)
 {
+    /* once a client has connected only exit if there are no devices */
+    if (client_connected_once)
+        return;
+
     if (mbim_proxy_get_n_clients (proxy) == 0) {
         g_assert (timeout_id == 0);
         timeout_id = g_timeout_add_seconds (EMPTY_PROXY_LIFETIME_SECS,
@@ -160,6 +165,17 @@ proxy_n_clients_changed (MbimProxy *_proxy)
         g_source_remove (timeout_id);
         timeout_id = 0;
     }
+
+    client_connected_once = TRUE;
+}
+
+static void
+proxy_n_devices_changed (MbimProxy *_proxy)
+{
+    if (mbim_proxy_get_n_devices (proxy) == 0) {
+        if (loop)
+            g_main_loop_quit (loop);
+    }
 }
 
 /*****************************************************************************/
@@ -208,6 +224,10 @@ int main (int argc, char **argv)
                       "notify::" MBIM_PROXY_N_CLIENTS,
                       G_CALLBACK (proxy_n_clients_changed),
                       NULL);
+    g_signal_connect (proxy,
+                      "notify::" MBIM_PROXY_N_DEVICES,
+                      G_CALLBACK (proxy_n_devices_changed),
+                      NULL);
 
     /* Loop */
     loop = g_main_loop_new (NULL, FALSE);
-- 
1.9.3



More information about the libmbim-devel mailing list