From: Daniel Wagner <daniel.wag...@bmw-carit.de>

When removing the entry we need to clear all references towoards it.
---
 src/session.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/session.c b/src/session.c
index c31fa6c..455f249 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1243,6 +1243,13 @@ static struct service_entry *create_service_entry(struct 
connman_session * sessi
 static void destroy_service_entry(gpointer data)
 {
        struct service_entry *entry = data;
+       struct session_info *info = entry->session->info;
+       struct connman_session *session;
+
+       if (info != NULL && info->entry == entry) {
+               session = entry->session;
+               deselect_and_disconnect(session);
+       }
 
        pending_timeout_remove_all(entry);
        g_free(entry->ifname);
@@ -1286,6 +1293,7 @@ static void session_changed(struct connman_session 
*session,
 {
        struct session_info *info = session->info;
        struct session_info *info_last = session->info_last;
+       struct connman_service *service;
        GSequenceIter *service_iter = NULL, *service_iter_last = NULL;
        GSequence *service_list_last;
        GHashTable *service_hash_last;
@@ -1317,15 +1325,20 @@ static void session_changed(struct connman_session 
*session,
                        service_hash_last = session->service_hash;
                        service_list_last = session->service_list;
 
+                       if (info->entry != NULL)
+                               service = info->entry->service;
+                       else
+                               service = NULL;
+
                        populate_service_list(session);
 
-                       if (info->entry != NULL) {
+                       if (service != NULL) {
                                service_iter_last = g_hash_table_lookup(
                                                        service_hash_last,
-                                                       info->entry->service);
+                                                       service);
                                service_iter = g_hash_table_lookup(
                                                        session->service_hash,
-                                                       info->entry->service);
+                                                       service);
                        }
 
                        if (service_iter == NULL && service_iter_last != NULL) {
-- 
1.8.2.rc3.16.gce432ca

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to