]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
format_stackdriver: When JSON generation fails, reset the generator because it is... 4268/head
authorFlorian Forster <octo@collectd.org>
Thu, 1 Feb 2024 15:53:44 +0000 (16:53 +0100)
committerFlorian Forster <octo@collectd.org>
Thu, 1 Feb 2024 16:31:39 +0000 (17:31 +0100)
src/utils/format_stackdriver/format_stackdriver.c

index 9e9df4cf34ccf08a0317935aa4844dfcc3c770c3..eb0363b587d77216736648a4052fc5730a92ec87 100644 (file)
@@ -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 */