Skip to content

Commit 379ccd1

Browse files
committed
bugfixes: Fixed some API failures
1 parent 7cd041e commit 379ccd1

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

components/esp_rainmaker/src/core/esp_rmaker_core.c

+22-6
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,15 @@ static void esp_rmaker_task(void *param)
348348
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTING;
349349
esp_err_t err;
350350
wifi_event_group = xEventGroupCreate();
351-
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler, esp_rmaker_priv_data));
351+
if (!wifi_event_group) {
352+
ESP_LOGE(TAG, "Failed to create event group. Aborting");
353+
goto rmaker_err;
354+
}
355+
err = esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler, esp_rmaker_priv_data);
356+
if (err != ESP_OK) {
357+
ESP_LOGE(TAG, "Failed to register event handler. Error: %d. Aborting", err);
358+
goto rmaker_err;
359+
}
352360
/* Assisted claiming needs to be done before Wi-Fi connection */
353361
#ifdef CONFIG_ESP_RMAKER_ASSISTED_CLAIM
354362
if (esp_rmaker_priv_data->need_claim) {
@@ -357,7 +365,8 @@ static void esp_rmaker_task(void *param)
357365
if (err != ESP_OK) {
358366
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_FAILED, NULL, 0);
359367
ESP_LOGE(TAG, "esp_rmaker_self_claim_perform() returned %d. Aborting", err);
360-
vTaskDelete(NULL);
368+
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler);
369+
goto rmaker_err;
361370
}
362371
esp_rmaker_priv_data->claim_data = NULL;
363372
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_SUCCESSFUL, NULL, 0);
@@ -366,6 +375,8 @@ static void esp_rmaker_task(void *param)
366375
/* Wait for Wi-Fi connection */
367376
xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_EVENT, false, true, portMAX_DELAY);
368377
vEventGroupDelete(wifi_event_group);
378+
wifi_event_group = NULL;
379+
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &esp_rmaker_event_handler);
369380

370381
if (esp_rmaker_priv_data->enable_time_sync) {
371382
#ifdef CONFIG_MBEDTLS_HAVE_TIME_DATE
@@ -380,7 +391,7 @@ static void esp_rmaker_task(void *param)
380391
if (err != ESP_OK) {
381392
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_FAILED, NULL, 0);
382393
ESP_LOGE(TAG, "esp_rmaker_self_claim_perform() returned %d. Aborting", err);
383-
vTaskDelete(NULL);
394+
goto rmaker_err;
384395
}
385396
esp_rmaker_priv_data->claim_data = NULL;
386397
esp_rmaker_post_event(RMAKER_EVENT_CLAIM_SUCCESSFUL, NULL, 0);
@@ -391,20 +402,20 @@ static void esp_rmaker_task(void *param)
391402
esp_rmaker_priv_data->mqtt_config = esp_rmaker_get_mqtt_config();
392403
if (!esp_rmaker_priv_data->mqtt_config) {
393404
ESP_LOGE(TAG, "Failed to initialise MQTT Config after claiming. Aborting");
394-
vTaskDelete(NULL);
405+
goto rmaker_err;
395406
}
396407
err = esp_rmaker_mqtt_init(esp_rmaker_priv_data->mqtt_config);
397408
if (err != ESP_OK) {
398409
ESP_LOGE(TAG, "esp_rmaker_mqtt_init() returned %d. Aborting", err);
399-
vTaskDelete(NULL);
410+
goto rmaker_err;
400411
}
401412
esp_rmaker_priv_data->need_claim = false;
402413
}
403414
#endif /* ESP_RMAKER_CLAIM_ENABLED */
404415
err = esp_rmaker_mqtt_connect();
405416
if (err != ESP_OK) {
406417
ESP_LOGE(TAG, "esp_rmaker_mqtt_connect() returned %d. Aborting", err);
407-
vTaskDelete(NULL);
418+
goto rmaker_err;
408419
}
409420
esp_rmaker_priv_data->mqtt_connected = true;
410421
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_STARTED;
@@ -424,6 +435,11 @@ static void esp_rmaker_task(void *param)
424435
rmaker_end:
425436
esp_rmaker_mqtt_disconnect();
426437
esp_rmaker_priv_data->mqtt_connected = false;
438+
rmaker_err:
439+
if (wifi_event_group) {
440+
vEventGroupDelete(wifi_event_group);
441+
}
442+
wifi_event_group = NULL;
427443
esp_rmaker_priv_data->state = ESP_RMAKER_STATE_INIT_DONE;
428444
vTaskDelete(NULL);
429445
}

components/esp_rainmaker/src/core/esp_rmaker_device.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ static esp_rmaker_device_t *__esp_rmaker_device_create(const char *name, const c
5757
{
5858
if (!name) {
5959
ESP_LOGE(TAG, "%s name is mandatory", is_service ? "Service":"Device");
60+
return NULL;
6061
}
6162
_esp_rmaker_device_t *_device = calloc(1, sizeof(_esp_rmaker_device_t));
6263
if (!_device) {
@@ -97,7 +98,7 @@ esp_rmaker_device_t *esp_rmaker_service_create(const char *name, const char *typ
9798
esp_err_t esp_rmaker_device_add_param(const esp_rmaker_device_t *device, const esp_rmaker_param_t *param)
9899
{
99100
if (!device || !param) {
100-
ESP_LOGE(TAG, "Device or Parameter handle cannot be NULL");
101+
ESP_LOGE(TAG, "Device or Param handle cannot be NULL");
101102
return ESP_ERR_INVALID_ARG;
102103
}
103104
_esp_rmaker_device_t *_device = (_esp_rmaker_device_t *)device;
@@ -199,6 +200,7 @@ esp_err_t esp_rmaker_device_assign_primary_param(const esp_rmaker_device_t *devi
199200
{
200201
if (!device || !param) {
201202
ESP_LOGE(TAG,"Device or Param handle cannot be NULL");
203+
return ESP_ERR_INVALID_ARG;
202204
}
203205
((_esp_rmaker_device_t *)device)->primary = (_esp_rmaker_param_t *)param;
204206
return ESP_OK;

components/esp_rainmaker/src/core/esp_rmaker_node.c

+8-1
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,23 @@ esp_err_t esp_rmaker_node_add_attribute(const esp_rmaker_node_t *node, const cha
185185
while(attr && attr->next) {
186186
if (strcmp(attr->name, attr_name) == 0) {
187187
ESP_LOGE(TAG, "Node attribute with name %s already exists.", attr_name);
188+
return ESP_FAIL;
188189
}
189190
attr = attr->next;
190191
}
191192
esp_rmaker_attr_t *new_attr = calloc(1, sizeof(esp_rmaker_attr_t));
192193
if (!new_attr) {
193194
ESP_LOGE(TAG, "Failed to create node attribute %s.", attr_name);
194-
return ESP_FAIL;
195+
return ESP_ERR_NO_MEM;
195196
}
196197
new_attr->name = strdup(attr_name);
197198
new_attr->value = strdup(value);
199+
if (!new_attr->name || !new_attr->value) {
200+
ESP_LOGE(TAG, "Failed to allocate memory for name/value for attribute %s.", attr_name);
201+
esp_rmaker_attribute_delete(new_attr);
202+
return ESP_ERR_NO_MEM;
203+
}
204+
198205
if (attr) {
199206
attr->next = new_attr;
200207
} else {

components/esp_rainmaker/src/core/esp_rmaker_param.c

+1
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ esp_rmaker_param_t *esp_rmaker_param_create(const char *param_name, const char *
394394
{
395395
if (!param_name) {
396396
ESP_LOGE(TAG, "Param name is mandatory");
397+
return NULL;
397398
}
398399
_esp_rmaker_param_t *param = calloc(1, sizeof(_esp_rmaker_param_t));
399400
if (!param) {

0 commit comments

Comments
 (0)