From: Daniel Wagner <[email protected]>

We want to be able to modify and update sessions in future. Therefore
we track all active session in a global list.
---
 src/connman.h |  5 ++++-
 src/service.c | 23 ++++++++++++-----------
 src/session.c | 16 +++++++++-------
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/src/connman.h b/src/connman.h
index 69e7e8e..4133df6 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -698,7 +698,10 @@ int __connman_service_indicate_default(struct 
connman_service *service);
 int __connman_service_connect(struct connman_service *service);
 int __connman_service_disconnect(struct connman_service *service);
 int __connman_service_disconnect_all(void);
-void __connman_service_set_active_session(bool enable, GSList *list);
+
+struct connman_session;
+void __connman_service_set_active_session(struct connman_session *session,
+                                               bool enable, GSList *list);
 void __connman_service_auto_connect(void);
 bool __connman_service_remove(struct connman_service *service);
 bool __connman_service_is_provider_pending(struct connman_service *service);
diff --git a/src/service.c b/src/service.c
index 6290efc..ae4f9a9 100644
--- a/src/service.c
+++ b/src/service.c
@@ -42,6 +42,8 @@
 static DBusConnection *connection = NULL;
 
 static GList *service_list = NULL;
+static GSList *session_list = NULL;
+static int active_sessions[MAX_CONNMAN_SERVICE_TYPES] = {};
 static GHashTable *service_hash = NULL;
 static GSList *counter_list = NULL;
 static unsigned int autoconnect_timeout = 0;
@@ -3413,18 +3415,16 @@ static bool is_ignore(struct connman_service *service)
        return false;
 }
 
-static int active_sessions[MAX_CONNMAN_SERVICE_TYPES] = {};
-static int active_count = 0;
-
-void __connman_service_set_active_session(bool enable, GSList *list)
+void __connman_service_set_active_session(struct connman_session *session,
+                                               bool enable, GSList *list)
 {
        if (!list)
                return;
 
        if (enable)
-               active_count++;
+               session_list = g_slist_prepend(session_list, session);
        else
-               active_count--;
+               session_list = g_slist_remove(session_list, session);
 
        while (list != NULL) {
                enum connman_service_type type = GPOINTER_TO_INT(list->data);
@@ -3456,7 +3456,7 @@ void __connman_service_set_active_session(bool enable, 
GSList *list)
                        active_sessions[CONNMAN_SERVICE_TYPE_WIFI],
                        active_sessions[CONNMAN_SERVICE_TYPE_BLUETOOTH],
                        active_sessions[CONNMAN_SERVICE_TYPE_CELLULAR],
-                       active_count);
+                       g_slist_length(session_list));
 }
 
 struct preferred_tech_data {
@@ -3520,7 +3520,8 @@ static bool auto_connect_service(GList *services, bool 
preferred)
        bool autoconnecting = false;
        GList *list;
 
-       DBG("preferred %d sessions %d", preferred, active_count);
+       DBG("preferred %d sessions %d", preferred,
+               g_slist_length(session_list));
 
        ignore[CONNMAN_SERVICE_TYPE_VPN] = true;
 
@@ -3536,7 +3537,7 @@ static bool auto_connect_service(GList *services, bool 
preferred)
                if (service->pending ||
                                is_connecting(service) ||
                                is_connected(service)) {
-                       if (!active_count)
+                       if (!session_list)
                                return true;
 
                        ignore[service->type] = true;
@@ -3571,7 +3572,7 @@ static bool auto_connect_service(GList *services, bool 
preferred)
                service->userconnect = false;
                __connman_service_connect(service);
 
-               if (!active_count)
+               if (!session_list)
                        return true;
 
                ignore[service->type] = true;
@@ -3595,7 +3596,7 @@ static gboolean run_auto_connect(gpointer data)
                g_list_free(preferred_tech);
        }
 
-       if (!autoconnecting || active_count)
+       if (!autoconnecting || session_list)
                auto_connect_service(service_list, false);
 
        return FALSE;
diff --git a/src/session.c b/src/session.c
index 5ca2d30..554bc85 100644
--- a/src/session.c
+++ b/src/session.c
@@ -410,7 +410,7 @@ static void cleanup_session_final(struct connman_session 
*session)
        DBG("remove %s", session->session_path);
 
        if (info->connect)
-               __connman_service_set_active_session(false,
+               __connman_service_set_active_session(session, false,
                                session->info->config.allowed_bearers);
 
        g_slist_free(session->user_allowed_bearers);
@@ -946,7 +946,7 @@ static void trigger_disconnect(struct connman_session 
*session)
        if (!info->connect)
                return;
 
-       __connman_service_set_active_session(false,
+       __connman_service_set_active_session(session, false,
                                info->config.allowed_bearers);
 
        info->connect = false;
@@ -961,7 +961,7 @@ static void trigger_connect(struct connman_session *session)
                return;
 
        info->connect = true;
-       __connman_service_set_active_session(true,
+       __connman_service_set_active_session(session, true,
                                info->config.allowed_bearers);
 
        __connman_service_auto_connect();
@@ -999,14 +999,14 @@ int connman_session_config_update(struct connman_session 
*session)
                return err;
 
        if (info->connect)
-               __connman_service_set_active_session(false,
+               __connman_service_set_active_session(session, false,
                                info->config.allowed_bearers);
 
        g_slist_free(info->config.allowed_bearers);
        info->config.allowed_bearers = allowed_bearers;
 
        if (info->connect)
-               __connman_service_set_active_session(true,
+               __connman_service_set_active_session(session, true,
                                info->config.allowed_bearers);
 
        info->config.type = apply_policy_on_type(
@@ -1098,7 +1098,8 @@ static DBusMessage *change_session(DBusConnection *conn,
                                return __connman_error_failed(msg, -err);
 
                        if (info->connect)
-                               __connman_service_set_active_session(false,
+                               __connman_service_set_active_session(session,
+                                               false,
                                                info->config.allowed_bearers);
 
                        g_slist_free(info->config.allowed_bearers);
@@ -1113,7 +1114,8 @@ static DBusMessage *change_session(DBusConnection *conn,
                                return __connman_error_failed(msg, -err);
 
                        if (info->connect)
-                               __connman_service_set_active_session(true,
+                               __connman_service_set_active_session(session,
+                                               true,
                                                info->config.allowed_bearers);
 
                } else {
-- 
1.8.4.474.g128a96c

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to