From: Florian Forster Date: Thu, 1 Feb 2024 15:53:44 +0000 (+0100) Subject: format_stackdriver: When JSON generation fails, reset the generator because it is... X-Git-Tag: collectd-6.0.0.rc2~8^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F4268%2Fhead;p=thirdparty%2Fcollectd.git format_stackdriver: When JSON generation fails, reset the generator because it is in an unknown state. --- diff --git a/src/utils/format_stackdriver/format_stackdriver.c b/src/utils/format_stackdriver/format_stackdriver.c index 9e9df4cf3..eb0363b58 100644 --- a/src/utils/format_stackdriver/format_stackdriver.c +++ b/src/utils/format_stackdriver/format_stackdriver.c @@ -447,6 +447,15 @@ static void sd_output_reset_staged(sd_output_t *out) /* {{{ */ sfree(key); } /* }}} void sd_output_reset_staged */ +static void reset(sd_output_t *out) { + sd_output_reset_staged(out); + + yajl_gen_clear(out->gen); /* empty generator buffer */ + yajl_gen_reset(out->gen, NULL); /* reset generator state */ + + sd_output_initialize(out); +} + sd_output_t *sd_output_create(sd_resource_t *res) /* {{{ */ { sd_output_t *out = calloc(1, sizeof(*out)); @@ -549,6 +558,7 @@ int sd_output_add(sd_output_t *out, metric_t const *m) { if ((status != 0) && (status != EAGAIN)) { ERROR("sd_output_add: format_time_series failed with status %d.", status); STRBUF_DESTROY(id); + reset(out); return status; } @@ -597,12 +607,7 @@ char *sd_output_reset(sd_output_t *out) /* {{{ */ yajl_gen_get_buf(out->gen, &json_buffer, &(size_t){0}); char *ret = strdup((void const *)json_buffer); - sd_output_reset_staged(out); - - yajl_gen_free(out->gen); - out->gen = yajl_gen_alloc(/* funcs = */ NULL); - - sd_output_initialize(out); + reset(out); return ret; } /* }}} char *sd_output_reset */