diff --git a/components/esp_rainmaker/src/core/esp_rmaker_node.c b/components/esp_rainmaker/src/core/esp_rmaker_node.c index 04a51316..c98f4a9a 100644 --- a/components/esp_rainmaker/src/core/esp_rmaker_node.c +++ b/components/esp_rainmaker/src/core/esp_rmaker_node.c @@ -27,6 +27,7 @@ #include "esp_rmaker_internal.h" static const char *TAG = "esp_rmaker_node"; +static bool node_created; static void esp_rmaker_node_info_free(esp_rmaker_node_info_t *info) { @@ -84,6 +85,7 @@ esp_err_t esp_rmaker_node_delete(const esp_rmaker_node_t *node) _esp_rmaker_device_t *next_device = device->next; device->parent = NULL; esp_rmaker_device_delete((esp_rmaker_device_t *)device); + free(device); device = next_device; } /* Node ID is created in the context of esp_rmaker_init and just assigned @@ -95,6 +97,8 @@ esp_err_t esp_rmaker_node_delete(const esp_rmaker_node_t *node) if (_node->info) { esp_rmaker_node_info_free(_node->info); } + free(_node); + node_created = false; return ESP_OK; } return ESP_ERR_INVALID_ARG; @@ -102,7 +106,6 @@ esp_err_t esp_rmaker_node_delete(const esp_rmaker_node_t *node) esp_rmaker_node_t *esp_rmaker_node_create(const char *name, const char *type) { - static bool node_created; if (node_created) { ESP_LOGE(TAG, "Node has already been created. Cannot create another"); return NULL; diff --git a/components/esp_rainmaker/src/core/esp_rmaker_param.c b/components/esp_rainmaker/src/core/esp_rmaker_param.c index 34e42c6e..d291ac7d 100644 --- a/components/esp_rainmaker/src/core/esp_rmaker_param.c +++ b/components/esp_rainmaker/src/core/esp_rmaker_param.c @@ -533,6 +533,13 @@ esp_err_t esp_rmaker_param_delete(const esp_rmaker_param_t *param) if (_param->ui_type) { free(_param->ui_type); } + if (_param->bounds) { + free(_param->bounds); + } + if (_param->val.type == RMAKER_VAL_TYPE_STRING || _param->val.type == RMAKER_VAL_TYPE_OBJECT || + _param->val.type == RMAKER_VAL_TYPE_ARRAY) { + free(_param->val.val.s); + } free(_param); return ESP_OK; }