From e19e594d3a1d354a94752be0226c059278853d74 Mon Sep 17 00:00:00 2001 From: fengzero Date: Sat, 7 May 2022 01:47:45 +0000 Subject: [PATCH] fix(driver): crash when deleting cache" The tag name used in the cache has been freed --- src/adapter/driver/driver.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 48dc89c2..010b0cd1 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -486,12 +486,27 @@ static void load_tags(neu_adapter_driver_t *driver, neu_taggrp_config_t *group, neu_datatag_id_t *id = (neu_datatag_id_t *) iterator_get(&iter); neu_datatag_t * tag = neu_datatag_tbl_get(driver->tag_table, *id); + neu_datatag_t * tmp = calloc(1, sizeof(neu_datatag_t)); + memcpy(tmp, tag, sizeof(neu_datatag_t)); + tmp->name = strdup(tag->name); + tmp->addr_str = strdup(tag->addr_str); - utarray_push_back(*tags, (void *) &tag); + utarray_push_back(*tags, (void *) &tmp); } } static void free_tags(UT_array *tags) { + neu_datatag_t **tag = (neu_datatag_t **) utarray_back(tags); + + while (tag != NULL) { + utarray_pop_back(tags); + + free((*tag)->addr_str); + free((*tag)->name); + free(*tag); + + tag = (neu_datatag_t **) utarray_back(tags); + } utarray_free(tags); } \ No newline at end of file