summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-12-05 14:57:50 +0100
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-12-05 16:51:07 +0200
commit7fbdf15b2545bd9e9d1cb0376544e4f4095d2bd2 (patch)
tree326c9d2adc7d76eca00366fc2f07131baff656d0
parent7adbef0b1091f6320f3a0ff83a056e5d0c5e520e (diff)
downloadconnman-7fbdf15b2545bd9e9d1cb0376544e4f4095d2bd2.tar.gz
connman-7fbdf15b2545bd9e9d1cb0376544e4f4095d2bd2.tar.bz2
connman-7fbdf15b2545bd9e9d1cb0376544e4f4095d2bd2.zip
session: Call callback directly when no plugin is assigned
When we have no plugin assigned we have to call the final session callback directly. Since __connman_session_create() doesn't know if a plugin was called or not, create_policy_config() or __connman_session_create() needs to free all allocated resources (also in the error path).
-rw-r--r--src/session.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/session.c b/src/session.c
index cba77f87..9d1d273c 100644
--- a/src/session.c
+++ b/src/session.c
@@ -318,21 +318,22 @@ static void cleanup_user_config(struct user_config *user_config)
static int create_policy_config(struct connman_session *session,
connman_session_config_cb callback,
- void *user_data)
+ struct user_config *user_config)
{
struct connman_session_config *config;
if (session->policy == NULL) {
config = connman_session_create_default_config();
- if (config == NULL)
+ if (config == NULL) {
+ free_session(session);
+ cleanup_user_config(user_config);
return -ENOMEM;
+ }
- session->policy_config = config;
-
- return 0;
+ return callback(session, config, user_config, 0);
}
- return (*session->policy->create)(session, callback, user_data);
+ return (*session->policy->create)(session, callback, user_config);
}
static void probe_policy(struct connman_session_policy *policy)
@@ -1862,8 +1863,8 @@ int __connman_session_create(DBusMessage *msg)
goto err;
err = create_policy_config(session, session_create_cb, user_config);
- if (err < 0)
- goto err;
+ if (err < 0 && err != -EINPROGRESS)
+ return err;
return -EINPROGRESS;