summaryrefslogtreecommitdiff
path: root/src/session.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2011-08-22 14:24:18 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2011-08-23 17:22:29 +0200
commite07e2d14a387959e5c13e9cf5a74bc6de228b99e (patch)
treee7094781d5a1dbbabe62fe277755ea30b57008ca /src/session.c
parent1d66ff795f047f236b0f31730e4e172cfb62a71a (diff)
downloadconnman-e07e2d14a387959e5c13e9cf5a74bc6de228b99e.tar.gz
connman-e07e2d14a387959e5c13e9cf5a74bc6de228b99e.tar.bz2
connman-e07e2d14a387959e5c13e9cf5a74bc6de228b99e.zip
session: Fix selection of services
In case we didn't select a service (entry) reset the one in the info (deselection). And then we have also take a refence if the reason was CONNECT.
Diffstat (limited to 'src/session.c')
-rw-r--r--src/session.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/session.c b/src/session.c
index f0b6a207..19771b2a 100644
--- a/src/session.c
+++ b/src/session.c
@@ -823,18 +823,23 @@ static void select_and_connect(struct connman_session *session,
if (info->entry != NULL && info->entry != entry)
test_and_disconnect(session);
- if (entry != NULL) {
- info->entry = entry;
- info->entry->reason = reason;
+ if (entry == NULL) {
+ info->entry = NULL;
+ return;
+ }
- if (explicit_connect(reason) == TRUE)
- __connman_service_session_inc(info->entry->service);
+ info->entry = entry;
+ info->entry->reason = reason;
- if (do_connect == TRUE)
- __connman_service_connect(info->entry->service);
- else
- info->online = is_online(entry->state);
+ if (do_connect == TRUE) {
+ __connman_service_session_inc(info->entry->service);
+ __connman_service_connect(info->entry->service);
+ } else if (reason == CONNMAN_SESSION_REASON_CONNECT) {
+ /* session is already online take ref */
+ __connman_service_session_inc(info->entry->service);
}
+
+ info->online = is_online(entry->state);
}
static void session_changed(struct connman_session *session,