diff --git a/src/adapter/driver/cache.c b/src/adapter/driver/cache.c index aec580286..6e2829db7 100644 --- a/src/adapter/driver/cache.c +++ b/src/adapter/driver/cache.c @@ -772,7 +772,7 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache, } elem->value.type = value.type; - if (metas != NULL) { + if (metas != NULL && n_meta != 0) { if (elem->metas != NULL) { free(elem->metas); } diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 482c3ce67..28a5b38cc 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -375,6 +375,13 @@ static void update_im(neu_adapter_t *adapter, const char *group, } else { neu_free_dvalue(&tag_value->value); } + + if (tag_value->metas != NULL) { + for (int i = 0; i < tag_value->n_meta; i++) { + neu_free_dvalue(&tag_value->metas[i].value); + } + free(tag_value->metas); + } } utarray_free(data->tags); free(data->group);