Skip to content

Commit

Permalink
improved lock handling during connect
Browse files Browse the repository at this point in the history
  • Loading branch information
256dpi committed May 24, 2017
1 parent d2adb9c commit f297f8c
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions esp_mqtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,6 @@ static void esp_mqtt_message_handler(lwmqtt_client_t *c, void *ref, lwmqtt_strin
}

static bool esp_mqtt_process_connect() {
// acquire mutex
ESP_MQTT_LOCK();

// initialize the client
lwmqtt_init(&esp_mqtt_client, esp_mqtt_write_buffer, esp_mqtt_buffer_size, esp_mqtt_read_buffer, esp_mqtt_buffer_size);
lwmqtt_set_network(&esp_mqtt_client, &esp_mqtt_network, esp_lwmqtt_network_read, esp_lwmqtt_network_write);
Expand All @@ -93,7 +90,6 @@ static bool esp_mqtt_process_connect() {
lwmqtt_err_t err = esp_lwmqtt_network_connect(&esp_mqtt_network, esp_mqtt_config.host, esp_mqtt_config.port);
if (err != LWMQTT_SUCCESS) {
ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_lwmqtt_network_connect: %d", err);
ESP_MQTT_UNLOCK();
return false;
}

Expand All @@ -109,13 +105,9 @@ static bool esp_mqtt_process_connect() {
err = lwmqtt_connect(&esp_mqtt_client, &options, NULL, &return_code, esp_mqtt_command_timeout);
if (err != LWMQTT_SUCCESS) {
ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_connect: %d", err);
ESP_MQTT_UNLOCK();
return false;
}

// release mutex
ESP_MQTT_UNLOCK();

return true;
}

Expand All @@ -125,31 +117,34 @@ static void esp_mqtt_process(void *p) {
// log attempt
ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: begin connection attempt");

// acquire mutex
ESP_MQTT_LOCK();

// make connection attempt
if (esp_mqtt_process_connect()) {
// log success
ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: attempt successful");

// set local flag
esp_mqtt_connected = true;

// release mutex
ESP_MQTT_UNLOCK();

// exit loop
break;
}

// release mutex
ESP_MQTT_UNLOCK();

// log fail
ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: attempt failed");

// delay loop by 1s and yield to other processes
vTaskDelay(1000 / portTICK_PERIOD_MS);
}

// acquire mutex
ESP_MQTT_LOCK();

// set local flag
esp_mqtt_connected = true;

// release mutex
ESP_MQTT_UNLOCK();

// call callback if existing
if (esp_mqtt_status_callback) {
esp_mqtt_status_callback(ESP_MQTT_STATUS_CONNECTED);
Expand Down

0 comments on commit f297f8c

Please sign in to comment.