diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-09-26 10:44:50 +0200 |
---|---|---|
committer | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-09-27 10:28:28 +0200 |
commit | 14af0dde246b31d5152afec8947d69aebaeda4c7 (patch) | |
tree | 602a3a548f2b9bfcac46a97519f80a1cf1ae0d10 /src | |
parent | 7698d6d8261b256ebe0d964672df3a71b882e26f (diff) | |
download | connman-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.c | 13 |
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) |