From aa5f3db70652ad290c4e423828d89d167b7feca9 Mon Sep 17 00:00:00 2001 From: Dmitriy Paliy Date: Tue, 22 Mar 2011 14:29:07 +0200 Subject: [PATCH] Add release all sessions when adapter is switched off All sessions should be released when adapter is switched off. Then a new RequestSession method call always results in change from power off to power on such ensuring operational mode. Otherwise, it is possible to end up in adapter state being powered off after RequestSession succeded. g_slist_free is not called after g_slist_foreach because the list is updated using g_slist_remove inside of session_free, which is called for each element by g_slist_foreach. --- src/adapter.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/adapter.c b/src/adapter.c index cc4f43e70..691b963c7 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2507,6 +2507,15 @@ static void set_mode_complete(struct btd_adapter *adapter) DBG(""); + /* + * g_slist_free is not called after g_slist_foreach because the list is + * updated using g_slist_remove in session_remove which is called by + * session_free, which is called for each element by g_slist_foreach. + */ + if (adapter->mode == MODE_OFF) + g_slist_foreach(adapter->mode_sessions, (GFunc) session_free, + NULL); + if (adapter->pending_mode == NULL) return; -- 2.47.3