summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-26 10:44:50 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-27 10:28:28 +0200
commit14af0dde246b31d5152afec8947d69aebaeda4c7 (patch)
tree602a3a548f2b9bfcac46a97519f80a1cf1ae0d10 /src
parent7698d6d8261b256ebe0d964672df3a71b882e26f (diff)
downloadconnman-14af0dde246b31d5152afec8947d69aebaeda4c7.tar.gz
connman-14af0dde246b31d5152afec8947d69aebaeda4c7.tar.bz2
connman-14af0dde246b31d5152afec8947d69aebaeda4c7.zip
session: Maintain a sorted policy plugin list
Diffstat (limited to 'src')
-rw-r--r--src/session.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/session.c b/src/session.c
index d2055a29..1cd34100 100644
--- a/src/session.c
+++ b/src/session.c
@@ -36,6 +36,7 @@ static DBusConnection *connection;
static GHashTable *session_hash;
static connman_bool_t sessionmode;
static struct connman_session *ecall_session;
+static GSList *policy_list;
enum connman_session_trigger {
CONNMAN_SESSION_TRIGGER_UNKNOWN = 0,
@@ -275,6 +276,14 @@ static int policy_get_string(struct connman_session *session, const char *id,
return (*session->policy->get_string)(id, key, val);
}
+static gint compare_priority(gconstpointer a, gconstpointer b)
+{
+ const struct connman_session_policy *policy1 = a;
+ const struct connman_session_policy *policy2 = b;
+
+ return policy2->priority - policy1->priority;
+}
+
static struct connman_session *session_lookup_by_id(const char *id)
{
struct connman_session *session;
@@ -341,12 +350,16 @@ int connman_session_policy_register(struct connman_session_policy *policy)
{
DBG("name %s", policy->name);
+ policy_list = g_slist_insert_sorted(policy_list, policy,
+ compare_priority);
return 0;
}
void connman_session_policy_unregister(struct connman_session_policy *policy)
{
DBG("name %s", policy->name);
+
+ policy_list = g_slist_remove(policy_list, policy);
}
static void cleanup_bearer_info(gpointer data, gpointer user_data)