From: Daniel Wagner <[email protected]>

---
 src/session.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/session.c b/src/session.c
index 07d4ef3..7037cec 100644
--- a/src/session.c
+++ b/src/session.c
@@ -756,26 +756,30 @@ static connman_bool_t explicit_disconnect(struct 
connman_session *session)
 static void test_and_disconnect(struct connman_session *session)
 {
        struct session_info *info = session->info;
-       struct service_entry *entry;
+       struct connman_service *service;
        connman_bool_t disconnect;
 
-       disconnect = explicit_disconnect(session);
+       if (info->entry == NULL)
+               return;
 
-       entry = info->entry;
+       disconnect = explicit_disconnect(session);
 
        info->online = FALSE;
        info->reason = CONNMAN_SESSION_REASON_UNKNOWN;
+       info->entry->reason = CONNMAN_SESSION_REASON_UNKNOWN;
+
+       service = info->entry->service;
        info->entry = NULL;
 
        if (disconnect == TRUE) {
-               DBG("disconnect service %p", entry->service);
+               DBG("disconnect service %p", service);
 
                /*
                 * 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);
+               __connman_service_disconnect(service);
        }
 }
 
-- 
1.7.6

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

Reply via email to