diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-12-05 14:57:49 +0100 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-12-05 16:51:02 +0200 |
commit | 7adbef0b1091f6320f3a0ff83a056e5d0c5e520e (patch) | |
tree | 4bd8336f069ee00c127ec18b825cc0fd97879527 /src/session.c | |
parent | 8008dace850e867ce39b120fc9ba5ffd860e5c94 (diff) | |
download | connman-7adbef0b1091f6320f3a0ff83a056e5d0c5e520e.tar.gz connman-7adbef0b1091f6320f3a0ff83a056e5d0c5e520e.tar.bz2 connman-7adbef0b1091f6320f3a0ff83a056e5d0c5e520e.zip |
session: Add a cleanup function for the user config
This helps to make the error path more readable.
Diffstat (limited to 'src/session.c')
-rw-r--r-- | src/session.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/session.c b/src/session.c index 076eb809..cba77f87 100644 --- a/src/session.c +++ b/src/session.c @@ -297,6 +297,25 @@ static int assign_policy_plugin(struct connman_session *session) return 0; } +struct user_config { + DBusMessage *pending; + + enum connman_session_type type; + GSList *allowed_bearers; +}; + +static void cleanup_user_config(struct user_config *user_config) +{ + if (user_config == NULL) + return; + + if (user_config->pending != NULL) + dbus_message_unref(user_config->pending); + + g_slist_free(user_config->allowed_bearers); + g_free(user_config); +} + static int create_policy_config(struct connman_session *session, connman_session_config_cb callback, void *user_data) @@ -1611,13 +1630,6 @@ static const GDBusMethodTable session_methods[] = { { }, }; -struct user_config { - DBusMessage *pending; - - enum connman_session_type type; - GSList *allowed_bearers; -}; - static int session_create_cb(struct connman_session *session, struct connman_session_config *config, void *user_data, int err) @@ -1648,6 +1660,7 @@ static int session_create_cb(struct connman_session *session, info->entry = NULL; session->user_allowed_bearers = user_config->allowed_bearers; + user_config->allowed_bearers = NULL; err = apply_policy_on_bearers( session->policy_config->allowed_bearers, @@ -1674,6 +1687,7 @@ static int session_create_cb(struct connman_session *session, DBUS_TYPE_OBJECT_PATH, &session->session_path, DBUS_TYPE_INVALID); g_dbus_send_message(connection, reply); + user_config->pending = NULL; populate_service_list(session); @@ -1695,7 +1709,7 @@ out: free_session(session); } - g_free(user_config); + cleanup_user_config(user_config); return err; } @@ -1858,11 +1872,7 @@ err: free_session(session); - if (user_config != NULL) { - dbus_message_unref(user_config->pending); - g_slist_free(user_config->allowed_bearers); - g_free(user_config); - } + cleanup_user_config(user_config); return err; } |