X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fplugin.h;h=e5e222fe6c7ca286512e3a7d5c0ba3721ad8a1a6;hb=a90a18a7947c8803f7049551bedc81a669a07834;hp=446c8672ff890edd7a3180047ba7897677410b03;hpb=48b84af3c09033e4d55c04197e92bac06fe42251;p=sysdb.git diff --git a/src/include/core/plugin.h b/src/include/core/plugin.h index 446c867..e5e222f 100644 --- a/src/include/core/plugin.h +++ b/src/include/core/plugin.h @@ -52,7 +52,7 @@ typedef struct sdb_plugin_info sdb_plugin_info_t; * missing prototype warnings/errors for the plugin init * function */ #define SDB_PLUGIN_MAGIC \ - int sdb_module_init(sdb_plugin_info_t *info); + int sdb_module_init(sdb_plugin_info_t *info) typedef struct { _Bool do_loop; @@ -63,10 +63,11 @@ typedef struct { /* * sdb_plugin_load: * Load (any type of) plugin by loading the shared object file and calling the - * sdb_module_init function. + * sdb_module_init function. If specified, 'plugin_ctx' fine-tunes the + * behavior of the plugin. */ int -sdb_plugin_load(const char *name); +sdb_plugin_load(const char *name, const sdb_plugin_ctx_t *plugin_ctx); /* * sdb_plugin_set_info: @@ -220,11 +221,14 @@ sdb_plugin_register_log(const char *name, sdb_plugin_log_cb callback, * plugin has been called. It may be used to pass around various information * between the different component of the library without having each and * every plugin care about it. + * + * If non-NULL, sdb_plugin_set_ctx stores the previous context in the location + * pointed to be 'old'. */ sdb_plugin_ctx_t sdb_plugin_get_ctx(void); -sdb_plugin_ctx_t -sdb_plugin_set_ctx(sdb_plugin_ctx_t ctx); +int +sdb_plugin_set_ctx(sdb_plugin_ctx_t ctx, sdb_plugin_ctx_t *old); /* * sdb_plugin_configure: @@ -238,13 +242,47 @@ sdb_plugin_set_ctx(sdb_plugin_ctx_t ctx); int sdb_plugin_configure(const char *name, oconfig_item_t *ci); +/* + * sdb_plugin_reconfigure_init, sdb_plugin_reconfigure_finish: + * Reconfigure all plugins. This happens in multiple steps: first, call + * sdb_plugin_reconfigure_init to deconfigure all plugins by calling their + * config callbacks with a NULL config tree and unregistering all callbacks. + * Then, sdb_plugin_configure and other functions may be used to provide the + * new configuration or load new plugins. For all plugins which were already + * loaded before, sdb_module_init will be called with a NULL argument when + * reloading them. + * Finally, sdb_plugin_reconfigure_finish will clean up leftover pieces, like + * unloading plugins which are no longer in use. + * + * Returns: + * - 0 on success + * - a negative value else + */ +int +sdb_plugin_reconfigure_init(void); +int +sdb_plugin_reconfigure_finish(void); + /* * sdb_plugin_init_all: * Initialize all plugins using their registered "init" function. + * + * Returns: + * The number of failed initializations. */ int sdb_plugin_init_all(void); +/* + * sdb_plugin_shutdown_all: + * Shutdown all plugins using their registered "shutdown" function. + * + * Returns: + * The number of failed shutdowns. + */ +int +sdb_plugin_shutdown_all(void); + /* * sdb_plugin_collector_loop: * Loop until loop->do_loop is false, calling the next collector function on