From: Daniel Wagner <daniel.wag...@bmw-carit.de> Since we know if a service was connected by a user or by a session we can use this information and disconnect the service if there is no user asking for it. --- src/service.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/src/service.c b/src/service.c index 48fb5c4..d852c38 100644 --- a/src/service.c +++ b/src/service.c @@ -3575,9 +3575,35 @@ static void add_service_to_session(struct connman_session *session) } } +static void disconnect_service_on_last_session(struct connman_service *service) +{ + GHashTableIter iter; + gpointer key, value; + + DBG("service %p reason %s", service, + reason2string(service->connect_reason)); + + if (!is_connected(service)) + return; + + if(service->connect_reason != CONNMAN_SERVICE_CONNECT_REASON_SESSION) + return; + + g_hash_table_iter_init(&iter, session_hash); + while (g_hash_table_iter_next(&iter, &key, &value)) { + struct session_info *info = value; + + if (info->service == service) + return; + } + + __connman_service_disconnect(service); +} + static void remove_service_from_session(struct connman_session *session) { struct session_info *info; + struct connman_service *service; info = g_hash_table_lookup(session_hash, session); if (!info) @@ -3587,7 +3613,10 @@ static void remove_service_from_session(struct connman_session *session) return; __connman_session_remove_service(session, info->service); + service = info->service; info->service = NULL; + + disconnect_service_on_last_session(service); } void __connman_service_set_active_session(struct connman_session *session, -- 1.8.5.3 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman