From: Florian Forster Date: Sat, 27 Jun 2009 10:53:34 +0000 (+0200) Subject: src/plugin.[ch]: Add meta data to value_list_t. X-Git-Tag: collectd-4.8.0~103 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=f9666730f0bde464c27b794810b74eed7741e073;p=collectd.git src/plugin.[ch]: Add meta data to value_list_t. --- diff --git a/src/plugin.c b/src/plugin.c index 6139baf0..a5ae97b6 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -1136,6 +1136,8 @@ int plugin_dispatch_values (value_list_t *vl) data_set_t *ds; + int free_meta_data = 0; + if ((vl == NULL) || (vl->type[0] == 0) || (vl->values == NULL) || (vl->values_len < 1)) { @@ -1143,6 +1145,12 @@ int plugin_dispatch_values (value_list_t *vl) return (-1); } + /* Free meta data only if the calling function didn't specify any. In + * this case matches and targets may add some and the calling function + * may not expect (and therefore free) that data. */ + if (vl->meta == NULL) + free_meta_data = 1; + if (list_write == NULL) c_complain_once (LOG_WARNING, &no_write_complaint, "plugin_dispatch_values: No write callback has been " @@ -1283,6 +1291,12 @@ int plugin_dispatch_values (value_list_t *vl) vl->values_len = saved_values_len; } + if ((free_meta_data != 0) && (vl->meta != NULL)) + { + meta_data_destroy (vl->meta); + vl->meta = NULL; + } + return (0); } /* int plugin_dispatch_values */ diff --git a/src/plugin.h b/src/plugin.h index e54b27d6..e8e49567 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -24,6 +24,7 @@ #include "collectd.h" #include "configfile.h" +#include "meta_data.h" #define DATA_MAX_NAME_LEN 64 @@ -76,11 +77,12 @@ struct value_list_s char plugin_instance[DATA_MAX_NAME_LEN]; char type[DATA_MAX_NAME_LEN]; char type_instance[DATA_MAX_NAME_LEN]; + meta_data_t *meta; }; typedef struct value_list_s value_list_t; -#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "", "" } -#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "" } +#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "", "", NULL } +#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "", NULL } struct data_source_s {