summaryrefslogtreecommitdiff
path: root/src/session.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-12-05 14:57:49 +0100
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-12-05 16:51:02 +0200
commit7adbef0b1091f6320f3a0ff83a056e5d0c5e520e (patch)
tree4bd8336f069ee00c127ec18b825cc0fd97879527 /src/session.c
parent8008dace850e867ce39b120fc9ba5ffd860e5c94 (diff)
downloadconnman-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.c36
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;
}