From abb68f59613ae2eaee590f5a5f05de6bb9218ba1 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 29 Nov 2023 13:24:00 +0100 Subject: [PATCH] write_stackdriver plugin: Implement reference counting. --- src/write_stackdriver.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/write_stackdriver.c b/src/write_stackdriver.c index 0680a0d37..70d69dadf 100644 --- a/src/write_stackdriver.c +++ b/src/write_stackdriver.c @@ -60,6 +60,7 @@ struct wg_callback_s { size_t timeseries_count; cdtime_t send_buffer_init_time; + int reference_count; pthread_mutex_t lock; }; typedef struct wg_callback_s wg_callback_t; @@ -380,6 +381,13 @@ static void wg_callback_free(void *data) /* {{{ */ if (cb == NULL) return; + pthread_mutex_lock(&cb->lock); + cb->reference_count--; + if (cb->reference_count > 0) { + pthread_mutex_unlock(&cb->lock); + return; + } + sd_output_destroy(cb->formatter); cb->formatter = NULL; @@ -392,6 +400,9 @@ static void wg_callback_free(void *data) /* {{{ */ curl_easy_cleanup(cb->curl); } + pthread_mutex_unlock(&cb->lock); + pthread_mutex_destroy(&cb->lock); + sfree(cb); } /* }}} void wg_callback_free */ @@ -683,10 +694,13 @@ static int wg_config(oconfig_item_t *ci) /* {{{ */ user_data_t user_data = { .data = cb, + .free_func = wg_callback_free, }; + + cb->reference_count++; plugin_register_flush("write_stackdriver", wg_flush, &user_data); - user_data.free_func = wg_callback_free; + cb->reference_count++; plugin_register_write("write_stackdriver", wg_write, &user_data); return 0; -- 2.47.2