From: Daniel Wagner <[email protected]>

The lookup can be reused later again.
---
 src/session.c |   47 +++++++++++++++++++++++++++++++----------------
 1 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/src/session.c b/src/session.c
index 5cc85c4..9efee6d 100644
--- a/src/session.c
+++ b/src/session.c
@@ -450,6 +450,28 @@ static void ipconfig_ipv6_changed(struct connman_session 
*session)
                                                info->service);
 }
 
+static GSequenceIter *lookup_service(struct connman_session *session,
+                                       struct connman_service *service)
+{
+       GSequenceIter *iter;
+
+       if (service == NULL)
+               return NULL;
+
+       iter = g_sequence_get_begin_iter(session->service_list);
+
+       while (g_sequence_iter_is_end(iter) == FALSE) {
+               struct connman_service *service_iter = g_sequence_get(iter);
+
+               if (service_iter == service)
+                       return iter;
+
+               iter = g_sequence_iter_next(iter);
+       }
+
+       return NULL;
+}
+
 static connman_bool_t service_type_match(struct connman_session *session,
                                        struct connman_service *service)
 {
@@ -1273,27 +1295,20 @@ static void service_add(struct connman_service *service)
        }
 }
 
-static connman_bool_t service_remove_from_session(
-                                       struct connman_session *session,
+static int service_remove_from_session(struct connman_session *session,
                                        struct connman_service *service)
 {
-       GSequenceIter *iter;
-
-       iter = g_sequence_get_begin_iter(session->service_list);
-
-       while (g_sequence_iter_is_end(iter) == FALSE) {
-               struct connman_service *service_iter = g_sequence_get(iter);
 
-               if (service_iter == service) {
-                       g_sequence_remove(iter);
+       GSequenceIter *iter;
 
-                       return TRUE;
-               }
+       iter = lookup_service(session, service);
+       if (iter == NULL)
+               return -ENOENT;
 
-               iter = g_sequence_iter_next(iter);
-       }
+       session->info.online = FALSE;
+       g_sequence_remove(iter);
 
-       return FALSE;
+       return 0;
 }
 
 static void service_remove(struct connman_service *service)
@@ -1312,7 +1327,7 @@ static void service_remove(struct connman_service 
*service)
                session = value;
                info = &session->info;
 
-               if (service_remove_from_session(session, service) == FALSE)
+               if (service_remove_from_session(session, service) != 0)
                        continue;
 
                info->service = NULL;
-- 
1.7.4.4

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

Reply via email to