X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fconfigfile.c;h=765a23c4d19acaf6b695f23fc909d972f56ec417;hb=2493484aac8d45b5a5abdb80f4db8c51db77bf6e;hp=02fd96f6fc2a09c2dd32dca7ca7a65c1c059f068;hpb=b49d4e33978d4c9508b68e931a7a27773f0348e1;p=collectd.git diff --git a/src/daemon/configfile.c b/src/daemon/configfile.c index 02fd96f6..765a23c4 100644 --- a/src/daemon/configfile.c +++ b/src/daemon/configfile.c @@ -73,7 +73,7 @@ typedef struct cf_complex_callback_s typedef struct cf_value_map_s { char *key; - int (*func) (const oconfig_item_t *); + int (*func) (oconfig_item_t *); } cf_value_map_t; typedef struct cf_global_option_s @@ -86,9 +86,10 @@ typedef struct cf_global_option_s /* * Prototypes of callback functions */ -static int dispatch_value_typesdb (const oconfig_item_t *ci); -static int dispatch_value_plugindir (const oconfig_item_t *ci); -static int dispatch_loadplugin (const oconfig_item_t *ci); +static int dispatch_value_typesdb (oconfig_item_t *ci); +static int dispatch_value_plugindir (oconfig_item_t *ci); +static int dispatch_loadplugin (oconfig_item_t *ci); +static int dispatch_block_plugin (oconfig_item_t *ci); /* * Private variables @@ -100,7 +101,8 @@ static cf_value_map_t cf_value_map[] = { {"TypesDB", dispatch_value_typesdb}, {"PluginDir", dispatch_value_plugindir}, - {"LoadPlugin", dispatch_loadplugin} + {"LoadPlugin", dispatch_loadplugin}, + {"Plugin", dispatch_block_plugin} }; static int cf_value_map_num = STATIC_ARRAY_SIZE (cf_value_map); @@ -225,7 +227,7 @@ static int dispatch_global_option (const oconfig_item_t *ci) return (-1); } /* int dispatch_global_option */ -static int dispatch_value_typesdb (const oconfig_item_t *ci) +static int dispatch_value_typesdb (oconfig_item_t *ci) { int i = 0; @@ -251,7 +253,7 @@ static int dispatch_value_typesdb (const oconfig_item_t *ci) return (0); } /* int dispatch_value_typesdb */ -static int dispatch_value_plugindir (const oconfig_item_t *ci) +static int dispatch_value_plugindir (oconfig_item_t *ci) { assert (strcasecmp (ci->key, "PluginDir") == 0); @@ -264,7 +266,7 @@ static int dispatch_value_plugindir (const oconfig_item_t *ci) return (0); } -static int dispatch_loadplugin (const oconfig_item_t *ci) +static int dispatch_loadplugin (oconfig_item_t *ci) { int i; const char *name; @@ -348,7 +350,7 @@ static int dispatch_value_plugin (const char *plugin, oconfig_item_t *ci) return (cf_dispatch (plugin, ci->key, buffer_ptr)); } /* int dispatch_value_plugin */ -static int dispatch_value (const oconfig_item_t *ci) +static int dispatch_value (oconfig_item_t *ci) { int ret = -2; int i; @@ -397,9 +399,19 @@ static int dispatch_block_plugin (oconfig_item_t *ci) if (IS_TRUE (global_option_get ("AutoLoadPlugin"))) { + plugin_ctx_t ctx; + plugin_ctx_t old_ctx; int status; + /* default to the global interval set before loading this plugin */ + memset (&ctx, 0, sizeof (ctx)); + ctx.interval = cf_get_default_interval (); + + old_ctx = plugin_set_ctx (ctx); status = plugin_load (name, /* flags = */ 0); + /* reset to the "global" context */ + plugin_set_ctx (old_ctx); + if (status != 0) { ERROR ("Automatically loading plugin \"%s\" failed "