From 79a87c3315bb85a71a2e69e0abaaabbfa544d6a9 Mon Sep 17 00:00:00 2001 From: Blaise Tarr Date: Mon, 10 Jan 2011 17:15:47 -0500 Subject: [PATCH] plugin.c: prevent re-adding read functions When multiple LoadPlugin options are used with a plugin, the plugin is only loaded once, however the plugin's read function is invoked multiple times at every interval. This in turn causes undesired redundant data to be sent to the write plugins. This patch prevents a plugin's read function from being re-added to the read_heap and read_list during plugin registration. Signed-off-by: Blaise Tarr Signed-off-by: Florian Forster --- src/plugin.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index 0f360c0f..52a5ea08 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -728,26 +728,36 @@ static int plugin_insert_read (read_func_t *rf) } } - le = llentry_create (rf->rf_name, rf); + le = llist_search (read_list, rf->rf_name); if (le == NULL) { - pthread_mutex_unlock (&read_lock); - ERROR ("plugin_insert_read: llentry_create failed."); - return (-1); - } + le = llentry_create (rf->rf_name, rf); + if (le == NULL) + { + pthread_mutex_unlock (&read_lock); + ERROR ("plugin_insert_read: llentry_create failed."); + return (-1); + } + + status = c_heap_insert (read_heap, rf); + if (status != 0) + { + pthread_mutex_unlock (&read_lock); + ERROR ("plugin_insert_read: c_heap_insert failed."); + llentry_destroy (le); + return (-1); + } - status = c_heap_insert (read_heap, rf); - if (status != 0) + /* This does not fail. */ + llist_append (read_list, le); + } + else { - pthread_mutex_unlock (&read_lock); - ERROR ("plugin_insert_read: c_heap_insert failed."); - llentry_destroy (le); - return (-1); + INFO ("plugin: plugin_insert_read: " + "read function for plugin `%s' already added.", + rf->rf_name); } - /* This does not fail. */ - llist_append (read_list, le); - pthread_mutex_unlock (&read_lock); return (0); } /* int plugin_insert_read */ -- 2.11.0