summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/plugin.h8
-rw-r--r--src/plugin.c10
2 files changed, 16 insertions, 2 deletions
diff --git a/include/plugin.h b/include/plugin.h
index 84e09586..350937ee 100644
--- a/include/plugin.h
+++ b/include/plugin.h
@@ -33,6 +33,10 @@ extern "C" {
understanding that ConnMan hasn't reached a stable API."
#endif
+#define CONNMAN_PLUGIN_PRIORITY_LOW -100
+#define CONNMAN_PLUGIN_PRIORITY_DEFAULT 0
+#define CONNMAN_PLUGIN_PRIORITY_HIGH 100
+
/**
* SECTION:plugin
* @title: Plugin premitives
@@ -43,6 +47,7 @@ struct connman_plugin_desc {
const char *name;
const char *description;
const char *version;
+ int priority;
int (*init) (void);
void (*exit) (void);
};
@@ -75,7 +80,8 @@ struct connman_plugin_desc {
*/
#define CONNMAN_PLUGIN_DEFINE(name, description, version, init, exit) \
struct connman_plugin_desc connman_plugin_desc = { \
- #name, description, version, init, exit \
+ #name, description, version, \
+ CONNMAN_PLUGIN_PRIORITY_DEFAULT, init, exit \
};
#ifdef __cplusplus
diff --git a/src/plugin.c b/src/plugin.c
index 59d3572c..216fce15 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -36,6 +36,14 @@ struct connman_plugin {
struct connman_plugin_desc *desc;
};
+static gint compare_priority(gconstpointer a, gconstpointer b)
+{
+ const struct connman_plugin *plugin1 = a;
+ const struct connman_plugin *plugin2 = b;
+
+ return plugin2->desc->priority - plugin1->desc->priority;
+}
+
static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
{
struct connman_plugin *plugin;
@@ -60,7 +68,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
return FALSE;
}
- plugins = g_slist_append(plugins, plugin);
+ plugins = g_slist_insert_sorted(plugins, plugin, compare_priority);
return TRUE;
}