From c66f2410104029edce0e18f76f2567a520cea165 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 18 Jul 2011 15:32:39 +0400 Subject: [PATCH] Fix bug with data corruption during settings application. --- src/settings.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/settings.c b/src/settings.c index e0ca4805b..1eb5da2d6 100644 --- a/src/settings.c +++ b/src/settings.c @@ -135,7 +135,7 @@ json_fin_cb (memory_pool_t * pool, struct map_cb_data *data) jb = data->prev_data; /* Clean prev data */ if (jb->table) { - g_hash_table_remove_all (jb->table); + g_hash_table_unref (jb->table); } if (jb->buf) { g_free (jb->buf); @@ -547,10 +547,17 @@ apply_metric_settings (struct worker_task *task, struct metric *metric, struct m if (check_setting (task, &us, &ds)) { if (us != NULL || ds != NULL) { if (us != NULL) { + g_hash_table_ref (task->cfg->user_settings); res->user_settings = us; + memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_hash_table_unref, + task->cfg->user_settings); } if (ds != NULL) { + /* Need to ref hash table to avoid occasional data corruption */ + g_hash_table_ref (task->cfg->domain_settings); res->domain_settings = ds; + memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_hash_table_unref, + task->cfg->domain_settings); } } else { -- 2.39.5