From: Daniel Wagner <[email protected]>

In preperation for the next patch.
---
 src/session.c |   47 +++++++++++++++++++++++++++--------------------
 1 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/src/session.c b/src/session.c
index 7d8b908..d2115cd 100644
--- a/src/session.c
+++ b/src/session.c
@@ -727,10 +727,26 @@ static connman_bool_t explicit_connect(enum 
connman_session_reason reason)
        return FALSE;
 }
 
+static connman_bool_t explicit_disconnect(struct connman_session *session)
+{
+       struct session_info *info = session->info;
+
+       if (explicit_connect(info->entry->reason) == FALSE)
+               return FALSE;
+
+       if (__connman_service_session_dec(info->entry->service) == TRUE)
+               return FALSE;
+
+       if (ecall_session != NULL && ecall_session != session)
+               return FALSE;
+
+       return TRUE;
+}
+
 static void test_and_disconnect(struct connman_session *session)
 {
        struct session_info *info = session->info;
-       struct connman_service *service;
+       struct service_entry *entry;
 
        if (info->entry == NULL)
                return;
@@ -739,30 +755,21 @@ static void test_and_disconnect(struct connman_session 
*session)
                session, reason2string(info->entry->reason),
                info->entry->service, info->entry->state);
 
-       if (explicit_connect(info->entry->reason) == FALSE)
-               goto out;
-
-       if (__connman_service_session_dec(info->entry->service) == TRUE)
-               goto out;
-
-       if (ecall_session != NULL && ecall_session != session)
-               goto out;
+       entry = info->entry;
 
-       service = info->entry->service;
        info->online = FALSE;
-       info->reason = CONNMAN_SESSION_TRIGGER_UNKNOWN;
        info->entry = NULL;
 
-       __connman_service_disconnect(service);
+       if (explicit_disconnect(session) == TRUE) {
+               info->reason = CONNMAN_SESSION_TRIGGER_UNKNOWN;
 
-       /*
-        * TODO: We should mark this entry as pending work. In case
-        * disconnect fails we just unassign this session from the
-        * service and can't do anything later on it
-        */
-out:
-       info->online = FALSE;
-       info->entry = NULL;
+               /*
+                * TODO: We should mark this entry as pending work. In case
+                * disconnect fails we just unassign this session from the
+                * service and can't do anything later on it
+                */
+               __connman_service_disconnect(entry->service);
+       }
 }
 
 static void select_and_connect(struct connman_session *session,
-- 
1.7.6

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

Reply via email to