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