]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
format_stackdriver: When JSON generation fails, reset the generator because it is...
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:42:48 +0000 (17:42 +0100)
src/utils/format_stackdriver/format_stackdriver.c

index 3c45aacb42192dd2e0522178168b0950691f807c..fcb47856621f44251ac595aa62899c8e1fc50394 100644 (file)
@@ -479,6 +479,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));
@@ -576,6 +585,7 @@ int sd_output_add(sd_output_t *out, data_set_t const *ds,
     }
     if (status != 0) {
       ERROR("sd_output_add: format_time_series failed with status %d.", status);
+      reset(out);
       return status;
     }
     staged = 1;
@@ -619,12 +629,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 */