From: Florian Forster Date: Wed, 29 Nov 2023 12:24:00 +0000 (+0100) Subject: write_stackdriver plugin: Implement reference counting. X-Git-Tag: 6.0.0-rc0~38^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abb68f59613ae2eaee590f5a5f05de6bb9218ba1;p=thirdparty%2Fcollectd.git write_stackdriver plugin: Implement reference counting. --- 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;