diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-02-28 18:11:24 +0100 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-02-28 18:11:24 +0100 |
commit | 515d5e66bb81bdf1fc63b28e8f50ee558d767630 (patch) | |
tree | 9078ffc52a4ae6fb2057b87310d2aacb320ca526 /plugins.c | |
parent | 41030c8ee688af283f56b47d0a80f88aa2d4c53d (diff) |
separated loading and starting of plugins to allow runtime dependencies
Diffstat (limited to 'plugins.c')
-rw-r--r-- | plugins.c | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -476,11 +476,6 @@ plug_init_plugin (DB_plugin_t* (*loadfunc)(DB_functions_t *), void *handle) { plug->plugin = plugin_api; plug->handle = handle; plug->next = plugins; - if (plug->plugin->start) { - if (plug->plugin->start () < 0) { - plug->plugin->inactive = 1; - } - } plugins = plug; return 0; } @@ -613,12 +608,13 @@ plug_load_all (void) { #include "moduleconf.h" #undef PLUG + plugin_t *plug; // categorize plugins int numplugins = 0; int numdecoders = 0; int numvfs = 0; int numoutput = 0; - for (plugin_t *plug = plugins; plug; plug = plug->next) { + for (plug = plugins; plug; plug = plug->next) { g_plugins[numplugins++] = plug->plugin; if (plug->plugin->type == DB_PLUGIN_DECODER) { fprintf (stderr, "found decoder plugin %s\n", plug->plugin->name); @@ -642,6 +638,15 @@ plug_load_all (void) { g_output_plugins[numoutput++] = (DB_output_t *)plug->plugin; } } + // start plugins + for (plug = plugins; plug; plug = plug->next) { + if (plug->plugin->start) { + if (plug->plugin->start () < 0) { + plug->plugin->inactive = 1; + } + } + } + // fprintf (stderr, "numplugins: %d, numdecoders: %d, numvfs: %d\n", numplugins, numdecoders, numvfs); g_plugins[numplugins] = NULL; g_decoder_plugins[numdecoders] = NULL; |