summaryrefslogtreecommitdiff
path: root/src/plugin.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-02-28 01:18:56 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-02-28 01:18:56 +0100
commitc2d1b081ccdd3720ef645bf8dbf82ea4abc752fb (patch)
treeee6bd10a1f4aff39c1052b1f40df9d12a3e2851a /src/plugin.c
parent2e88ef3053cf2a12115f78fcd4292266b4c98943 (diff)
downloadconnman-c2d1b081ccdd3720ef645bf8dbf82ea4abc752fb.tar.gz
connman-c2d1b081ccdd3720ef645bf8dbf82ea4abc752fb.tar.bz2
connman-c2d1b081ccdd3720ef645bf8dbf82ea4abc752fb.zip
Load plugins in priority order
Diffstat (limited to 'src/plugin.c')
-rw-r--r--src/plugin.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/plugin.c b/src/plugin.c
index 216fce15..1b573654 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -33,6 +33,7 @@ static GSList *plugins = NULL;
struct connman_plugin {
void *handle;
+ gboolean active;
struct connman_plugin_desc *desc;
};
@@ -61,13 +62,9 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
return FALSE;
plugin->handle = handle;
+ plugin->active = FALSE;
plugin->desc = desc;
- if (desc->init() < 0) {
- g_free(plugin);
- return FALSE;
- }
-
plugins = g_slist_insert_sorted(plugins, plugin, compare_priority);
return TRUE;
@@ -75,6 +72,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
int __connman_plugin_init(const char *pattern, const char *exclude)
{
+ GSList *list;
GDir *dir;
const gchar *file;
gchar *filename;
@@ -131,6 +129,15 @@ int __connman_plugin_init(const char *pattern, const char *exclude)
g_dir_close(dir);
}
+ for (list = plugins; list; list = list->next) {
+ struct connman_plugin *plugin = list->data;
+
+ if (plugin->desc->init() < 0)
+ continue;
+
+ plugin->active = TRUE;
+ }
+
return 0;
}
@@ -143,7 +150,7 @@ void __connman_plugin_cleanup(void)
for (list = plugins; list; list = list->next) {
struct connman_plugin *plugin = list->data;
- if (plugin->desc->exit)
+ if (plugin->active == TRUE && plugin->desc->exit)
plugin->desc->exit();
dlclose(plugin->handle);