diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-12-05 14:57:50 +0100 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-12-05 16:51:07 +0200 |
commit | 7fbdf15b2545bd9e9d1cb0376544e4f4095d2bd2 (patch) | |
tree | 326c9d2adc7d76eca00366fc2f07131baff656d0 | |
parent | 7adbef0b1091f6320f3a0ff83a056e5d0c5e520e (diff) | |
download | connman-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.c | 17 |
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; |