projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'collectd-4.0'
[collectd.git]
/
src
/
perl.c
diff --git
a/src/perl.c
b/src/perl.c
index
ebdacb8
..
1ad7248
100644
(file)
--- a/
src/perl.c
+++ b/
src/perl.c
@@
-25,8
+25,6
@@
*/
#include "collectd.h"
*/
#include "collectd.h"
-#include "common.h"
-#include "plugin.h"
#include "configfile.h"
#include "configfile.h"
@@
-35,6
+33,15
@@
#include <XSUB.h>
#include <XSUB.h>
+/* Some versions of Perl define their own version of DEBUG... :-/ */
+#ifdef DEBUG
+# undef DEBUG
+#endif /* DEBUG */
+
+/* ... while we want the definition found in plugin.h. */
+#include "plugin.h"
+#include "common.h"
+
#define PLUGIN_INIT 0
#define PLUGIN_READ 1
#define PLUGIN_WRITE 2
#define PLUGIN_INIT 0
#define PLUGIN_READ 1
#define PLUGIN_WRITE 2
@@
-85,7
+92,7
@@
static const char *config_keys[] =
{
"LoadPlugin",
"BaseName",
{
"LoadPlugin",
"BaseName",
- NULL
+ "IncludeDir"
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
@@
-952,6
+959,8
@@
static XS (boot_Collectd)
static int perl_config (const char *key, const char *value)
{
static int perl_config (const char *key, const char *value)
{
+ assert (NULL != perl);
+
log_debug ("perl_config: key = \"%s\", value=\"%s\"", key, value);
if (0 == strcasecmp (key, "LoadPlugin")) {
log_debug ("perl_config: key = \"%s\", value=\"%s\"", key, value);
if (0 == strcasecmp (key, "LoadPlugin")) {
@@
-965,7
+974,7
@@
static int perl_config (const char *key, const char *value)
log_debug ("perl_config: loading perl plugin \"%s\"", value);
Perl_load_module (perl, PERL_LOADMOD_NOIMPORT,
log_debug ("perl_config: loading perl plugin \"%s\"", value);
Perl_load_module (perl, PERL_LOADMOD_NOIMPORT,
-
newSVpv (
module_name, strlen (module_name)),
+
Perl_newSVpv (perl,
module_name, strlen (module_name)),
Nullsv);
}
else if (0 == strcasecmp (key, "BaseName")) {
Nullsv);
}
else if (0 == strcasecmp (key, "BaseName")) {
@@
-973,6
+982,11
@@
static int perl_config (const char *key, const char *value)
strncpy (base_name, value, sizeof (base_name));
base_name[sizeof (base_name) - 1] = '\0';
}
strncpy (base_name, value, sizeof (base_name));
base_name[sizeof (base_name) - 1] = '\0';
}
+ else if (0 == strcasecmp (key, "IncludeDir")) {
+ Perl_av_unshift (perl, GvAVn (PL_incgv), 1);
+ Perl_av_store (perl, GvAVn (PL_incgv),
+ 0, Perl_newSVpv (perl, value, strlen (value)));
+ }
else {
return -1;
}
else {
return -1;
}
@@
-981,24
+995,32
@@
static int perl_config (const char *key, const char *value)
static int perl_init (void)
{
static int perl_init (void)
{
+ assert (NULL != perl);
+
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_INIT);
} /* static int perl_init (void) */
static int perl_read (void)
{
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_INIT);
} /* static int perl_init (void) */
static int perl_read (void)
{
+ assert (NULL != perl);
+
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_READ);
} /* static int perl_read (void) */
static int perl_write (const data_set_t *ds, const value_list_t *vl)
{
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_READ);
} /* static int perl_read (void) */
static int perl_write (const data_set_t *ds, const value_list_t *vl)
{
+ assert (NULL != perl);
+
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_WRITE, ds, vl);
} /* static int perl_write (const data_set_t *, const value_list_t *) */
static void perl_log (int level, const char *msg)
{
PERL_SET_CONTEXT (perl);
return pplugin_call_all (PLUGIN_WRITE, ds, vl);
} /* static int perl_write (const data_set_t *, const value_list_t *) */
static void perl_log (int level, const char *msg)
{
+ assert (NULL != perl);
+
PERL_SET_CONTEXT (perl);
pplugin_call_all (PLUGIN_LOG, level, msg);
return;
PERL_SET_CONTEXT (perl);
pplugin_call_all (PLUGIN_LOG, level, msg);
return;
@@
-1009,6
+1031,14
@@
static int perl_shutdown (void)
int i = 0;
int ret = 0;
int i = 0;
int ret = 0;
+ plugin_unregister_log ("perl");
+ plugin_unregister_config ("perl");
+ plugin_unregister_init ("perl");
+ plugin_unregister_read ("perl");
+ plugin_unregister_write ("perl");
+
+ assert (NULL != perl);
+
PERL_SET_CONTEXT (perl);
ret = pplugin_call_all (PLUGIN_SHUTDOWN);
PERL_SET_CONTEXT (perl);
ret = pplugin_call_all (PLUGIN_SHUTDOWN);
@@
-1042,8
+1072,11
@@
static int perl_shutdown (void)
perl_destruct (perl);
perl_free (perl);
perl_destruct (perl);
perl_free (perl);
+ perl = NULL;
PERL_SYS_TERM ();
PERL_SYS_TERM ();
+
+ plugin_unregister_shutdown ("perl");
return ret;
} /* static void perl_shutdown (void) */
return ret;
} /* static void perl_shutdown (void) */
@@
-1097,7
+1130,9
@@
void module_register (void)
plugin_register_log ("perl", perl_log);
plugin_register_config ("perl", perl_config, config_keys, config_keys_num);
plugin_register_init ("perl", perl_init);
plugin_register_log ("perl", perl_log);
plugin_register_config ("perl", perl_config, config_keys, config_keys_num);
plugin_register_init ("perl", perl_init);
+
plugin_register_read ("perl", perl_read);
plugin_register_read ("perl", perl_read);
+
plugin_register_write ("perl", perl_write);
plugin_register_shutdown ("perl", perl_shutdown);
return;
plugin_register_write ("perl", perl_write);
plugin_register_shutdown ("perl", perl_shutdown);
return;