diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-08-22 14:24:18 +0200 |
---|---|---|
committer | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-08-23 17:22:29 +0200 |
commit | e07e2d14a387959e5c13e9cf5a74bc6de228b99e (patch) | |
tree | e7094781d5a1dbbabe62fe277755ea30b57008ca /src/session.c | |
parent | 1d66ff795f047f236b0f31730e4e172cfb62a71a (diff) | |
download | connman-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.c | 23 |
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, |