summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: cb447bc)
raw | patch | inline | side by side (parent: cb447bc)
author | Pavel Rochnyack <pavel2000@ngs.ru> | |
Thu, 11 Aug 2016 11:19:25 +0000 (17:19 +0600) | ||
committer | Pavel Rochnyack <pavel2000@ngs.ru> | |
Fri, 16 Sep 2016 04:46:26 +0000 (10:46 +0600) |
bindings/perl/lib/Collectd.pm | patch | blob | history | |
src/perl.c | patch | blob | history |
index ddacf0242cd07eb979875c237fe78b7c9b304144..7e89e45f5d05c60c4de44275757dbe9884c52332 100644 (file)
return plugin_register_notification($name, $data);
}
if (TYPE_FLUSH == $type) {
+ #For collectd-5.6 only
+ lock %{$plugins[$type]};
+ $plugins[$type]->{$name} = $data;
return plugin_register_flush($name, $data);
}
lock %{$plugins[$type]};
diff --git a/src/perl.c b/src/perl.c
index 700bb989cb856d8a24757690ab2b3a89cd52bff5..3f430bd1a941a33189f1bdec746dfc8d81b41760 100644 (file)
--- a/src/perl.c
+++ b/src/perl.c
#define PLUGIN_LOG 4
#define PLUGIN_NOTIF 5
#define PLUGIN_FLUSH 6
+#define PLUGIN_FLUSH_ALL 7 /* For collectd-5.6 only */
-#define PLUGIN_TYPES 7
+#define PLUGIN_TYPES 8
#define PLUGIN_CONFIG 254
#define PLUGIN_DATASET 255
* private variables
*/
+static int flush_callback_registered = 0;
+
/* if perl_threads != NULL perl_threads->head must
* point to the "base" thread */
static c_ithread_list_t *perl_threads = NULL;
XPUSHs (sv_2mortal (newSVnv (CDTIME_T_TO_DOUBLE (timeout))));
XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0)));
}
+ else if (PLUGIN_FLUSH_ALL == type) {
+ cdtime_t timeout;
+ subname = "Collectd::plugin_call_all";
+ /*
+ * $_[0] = $timeout;
+ * $_[1] = $identifier;
+ */
+ timeout = va_arg (ap, cdtime_t);
+
+ XPUSHs (sv_2mortal (newSViv ((IV)PLUGIN_FLUSH)));
+ XPUSHs (sv_2mortal (newSVnv (CDTIME_T_TO_DOUBLE (timeout))));
+ XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0)));
+ }
else if (PLUGIN_INIT == type) {
subname = "Collectd::plugin_call_all";
XPUSHs (sv_2mortal (newSViv ((IV)type)));
@@ -1683,7 +1699,13 @@ static void _plugin_register_generic_userdata (pTHX, int type, const char *desc)
ret = plugin_register_notification(pluginname, perl_notify, &userdata);
}
else if (PLUGIN_FLUSH == type) {
- ret = plugin_register_flush(pluginname, perl_flush, &userdata);
+ if (0 == flush_callback_registered) { /* For collectd-5.6 only, #1731 */
+ flush_callback_registered++;
+ ret = plugin_register_flush("perl", perl_flush, /* user_data = */ NULL);
+ }
+
+ if (0 == ret)
+ ret = plugin_register_flush(pluginname, perl_flush, &userdata);
}
else {
ret = -1;
aTHX = t->interp;
}
+
+ /* For collectd-5.6 only, #1731 */
+ if (user_data == NULL || user_data->data == NULL)
+ return pplugin_call (aTHX_ PLUGIN_FLUSH_ALL, timeout, identifier);
+
return pplugin_call (aTHX_ PLUGIN_FLUSH, user_data->data, timeout, identifier);
} /* static int perl_flush (const int) */
aTHX, perl_threads->number_of_threads);
plugin_unregister_init ("perl");
+ plugin_unregister_flush ("perl"); /* For collectd-5.6 only, #1731 */
ret = pplugin_call (aTHX_ PLUGIN_SHUTDOWN);
current_status = perl_config_includedir (aTHX_ c);
else if (0 == strcasecmp (c->key, "Plugin"))
current_status = perl_config_plugin (aTHX_ c);
+ else if (0 == strcasecmp (c->key, "DisableOldFlush"))
+ flush_callback_registered++;
else
{
log_warn ("Ignoring unknown config key \"%s\".", c->key);