diff --git a/include/neuron/tag.h b/include/neuron/tag.h index 918f7696..f94661c3 100644 --- a/include/neuron/tag.h +++ b/include/neuron/tag.h @@ -91,6 +91,7 @@ UT_icd *neu_tag_get_icd(); neu_datatag_t *neu_tag_dup(const neu_datatag_t *tag); void neu_tag_copy(neu_datatag_t *tag, const neu_datatag_t *other); +void neu_tag_fini(neu_datatag_t *tag); void neu_tag_free(neu_datatag_t *tag); inline static bool neu_tag_attribute_test(const neu_datatag_t *tag, diff --git a/plugins/monitor/mqtt_handle.c b/plugins/monitor/mqtt_handle.c index 69c6e061..6ee59a06 100644 --- a/plugins/monitor/mqtt_handle.c +++ b/plugins/monitor/mqtt_handle.c @@ -316,9 +316,7 @@ end: NEU_REQ_UPDATE_TAG_EVENT == event) { neu_req_add_tag_t *add_tag = data; for (uint16_t i = 0; i < add_tag->n_tag; i++) { - free(add_tag->tags[i].address); - free(add_tag->tags[i].name); - free(add_tag->tags[i].description); + neu_tag_fini(&add_tag->tags[i]); } free(add_tag->tags); } else if (NEU_REQ_DEL_TAG_EVENT == event) { diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index fcf88ae0..cafbf9fd 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -680,9 +680,7 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) } for (uint16_t i = resp.index; i < cmd->n_tag; i++) { - free(cmd->tags[i].address); - free(cmd->tags[i].name); - free(cmd->tags[i].description); + neu_tag_fini(&cmd->tags[i]); } if (resp.index) { @@ -724,9 +722,7 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) } for (uint16_t i = resp.index; i < cmd->n_tag; i++) { - free(cmd->tags[i].address); - free(cmd->tags[i].name); - free(cmd->tags[i].description); + neu_tag_fini(&cmd->tags[i]); } if (resp.index > 0) { cmd->n_tag = resp.index; diff --git a/src/base/tag.c b/src/base/tag.c index 7ecaf3d5..8d693557 100644 --- a/src/base/tag.c +++ b/src/base/tag.c @@ -103,6 +103,13 @@ void neu_tag_copy(neu_datatag_t *tag, const neu_datatag_t *other) } } +void neu_tag_fini(neu_datatag_t *tag) +{ + if (tag) { + tag_array_free(tag); + } +} + void neu_tag_free(neu_datatag_t *tag) { if (tag) { diff --git a/src/core/manager.c b/src/core/manager.c index 3e2710c8..42d7bd71 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -587,9 +587,7 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_msg_exchange(header); reply(manager, header, &e); for (int i = 0; i < cmd->n_tag; i++) { - free(cmd->tags[i].address); - free(cmd->tags[i].name); - free(cmd->tags[i].description); + neu_tag_fini(&cmd->tags[i]); } free(cmd->tags); } else {