From d54dc98aff7fe748d83fc91b0fed685db990e3de Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 21 Sep 2016 11:32:20 +0200 Subject: [PATCH 1/1] src/daemon/plugin.c: Don't copy values twice. A copy of the values was made in plugin_dispatch_values_internal(). This code predates the "write queue", which means that each value list (and its values) are copied anyway and vl->values will always point to heap memory. --- src/daemon/plugin.c | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index d9f8da8c..50ab6757 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -2081,9 +2081,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl) int status; static c_complain_t no_write_complaint = C_COMPLAIN_INIT_STATIC; - value_t *saved_values; - int saved_values_len; - data_set_t *ds; _Bool free_meta_data = 0; @@ -2170,31 +2167,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl) escape_slashes (vl->type, sizeof (vl->type)); escape_slashes (vl->type_instance, sizeof (vl->type_instance)); - /* Copy the values. This way, we can assure `targets' that they get - * dynamically allocated values, which they can free and replace if - * they like. */ - if ((pre_cache_chain != NULL) || (post_cache_chain != NULL)) - { - saved_values = vl->values; - saved_values_len = vl->values_len; - - vl->values = (value_t *) calloc (vl->values_len, - sizeof (*vl->values)); - if (vl->values == NULL) - { - ERROR ("plugin_dispatch_values: calloc failed."); - vl->values = saved_values; - return (-1); - } - memcpy (vl->values, saved_values, - vl->values_len * sizeof (*vl->values)); - } - else /* if ((pre == NULL) && (post == NULL)) */ - { - saved_values = NULL; - saved_values_len = 0; - } - if (pre_cache_chain != NULL) { status = fc_process_chain (ds, vl, pre_cache_chain); @@ -2206,17 +2178,7 @@ static int plugin_dispatch_values_internal (value_list_t *vl) status, status); } else if (status == FC_TARGET_STOP) - { - /* Restore the state of the value_list so that plugins - * don't get confused.. */ - if (saved_values != NULL) - { - sfree (vl->values); - vl->values = saved_values; - vl->values_len = saved_values_len; - } return (0); - } } /* Update the value cache */ @@ -2236,15 +2198,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl) else fc_default_action (ds, vl); - /* Restore the state of the value_list so that plugins don't get - * confused.. */ - if (saved_values != NULL) - { - sfree (vl->values); - vl->values = saved_values; - vl->values_len = saved_values_len; - } - if ((free_meta_data != 0) && (vl->meta != NULL)) { meta_data_destroy (vl->meta); -- 2.11.0