src/plugin.[ch]: Add meta data to value_list_t.
[collectd.git] / src / plugin.c
index 6139baf..a5ae97b 100644 (file)
@@ -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 */