[collectd] [PATCH] perl plugin: Disable plugin after fatal configuration errors.
Sebastian Harl
sh at tokkee.org
Tue Sep 16 15:40:14 CEST 2008
Currently, the only such case is the failure to bootstrap the Perl interpreter
and Collectd module. This fixes a segfault that happened when trying to
configure Perl plugins in that case.
Signed-off-by: Sebastian Harl <sh at tokkee.org>
---
This patch is for 4.5 and master only.
---
src/perl.c | 27 +++++++++++++++++++--------
1 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/src/perl.c b/src/perl.c
index e6f7de0..6d95082 100644
--- a/src/perl.c
+++ b/src/perl.c
@@ -1768,10 +1768,10 @@ static int perl_config_plugin (pTHX_ oconfig_item_t *ci)
if (0 < retvals) {
SV *tmp = POPs;
if (! SvTRUE (tmp))
- ret = -1;
+ ret = 1;
}
else
- ret = -1;
+ ret = 1;
PUTBACK;
FREETMPS;
@@ -1781,30 +1781,41 @@ static int perl_config_plugin (pTHX_ oconfig_item_t *ci)
static int perl_config (oconfig_item_t *ci)
{
+ int status = 0;
int i = 0;
dTHXa (NULL);
for (i = 0; i < ci->children_num; ++i) {
oconfig_item_t *c = ci->children + i;
+ int current_status;
if (NULL != perl_threads)
aTHX = PERL_GET_CONTEXT;
if (0 == strcasecmp (c->key, "LoadPlugin"))
- perl_config_loadplugin (aTHX_ c);
+ current_status = perl_config_loadplugin (aTHX_ c);
else if (0 == strcasecmp (c->key, "BaseName"))
- perl_config_basename (aTHX_ c);
+ current_status = perl_config_basename (aTHX_ c);
else if (0 == strcasecmp (c->key, "EnableDebugger"))
- perl_config_enabledebugger (aTHX_ c);
+ current_status = perl_config_enabledebugger (aTHX_ c);
else if (0 == strcasecmp (c->key, "IncludeDir"))
- perl_config_includedir (aTHX_ c);
+ current_status = perl_config_includedir (aTHX_ c);
else if (0 == strcasecmp (c->key, "Plugin"))
- perl_config_plugin (aTHX_ c);
+ current_status = perl_config_plugin (aTHX_ c);
else
log_warn ("Ignoring unknown config key \"%s\".", c->key);
+
+ /* fatal error - it's up to perl_config_* to clean up */
+ if (0 > current_status) {
+ log_err ("Configuration failed with a fatal error - "
+ "plugin disabled!");
+ return current_status;
+ }
+
+ status += current_status;
}
- return 0;
+ return status;
} /* static int perl_config (oconfig_item_t *) */
void module_register (void)
--
1.6.0.1.216.g1b23a
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/collectd/attachments/20080916/a8262569/attachment.pgp
More information about the collectd
mailing list