From: Florian Forster Date: Wed, 29 Nov 2023 12:59:52 +0000 (+0100) Subject: write_http plugin: Unify coding style. X-Git-Tag: 6.0.0-rc0~38^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48d6a5ef5943b9b07312fc9c66e8eb5f7eb892fd;p=thirdparty%2Fcollectd.git write_http plugin: Unify coding style. A few plugins implement reference counting. Ensure that they use locks etc. consistently. --- diff --git a/src/write_http.c b/src/write_http.c index 0a4c39247..13b260c82 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -93,7 +93,7 @@ struct wh_callback_s { char *unix_socket_path; - size_t reference_count; + int reference_count; }; typedef struct wh_callback_s wh_callback_t; @@ -318,10 +318,12 @@ static void wh_callback_free(void *data) { * - plugin_register_notification * We can not rely on them being torn down in a known order. * Only actually free the structure when all references are dropped. */ + pthread_mutex_lock(&cb->curl_lock); cb->reference_count--; - - if (cb->reference_count) + if (cb->reference_count > 0) { + pthread_mutex_unlock(&cb->curl_lock); return; + } wh_flush(/* timeout = */ 0, NULL, &(user_data_t){.data = cb}); @@ -350,6 +352,10 @@ static void wh_callback_free(void *data) { sfree(cb->clientkeypass); sfree(cb->metrics_prefix); + pthread_mutex_unlock(&cb->curl_lock); + pthread_mutex_destroy(&cb->curl_lock); + pthread_mutex_destroy(&cb->send_buffer_lock); + sfree(cb); } /* void wh_callback_free */ @@ -557,7 +563,6 @@ static int wh_config_node(oconfig_item_t *ci) { cb->metrics_prefix = strdup(WRITE_HTTP_DEFAULT_PREFIX); cb->curl_stats = NULL; cb->unix_socket_path = NULL; - cb->reference_count = 1; if (cb->metrics_prefix == NULL) { ERROR("write_http plugin: strdup failed."); @@ -726,11 +731,6 @@ static int wh_config_node(oconfig_item_t *ci) { plugin_register_notification(callback_name, wh_notify, &user_data); } - /* Drop the reference used in wh_config_node(). - * `cb` will actually be freed once all references held in the callback - * handlers are dropped as well. */ - wh_callback_free(cb); - return 0; } /* int wh_config_node */