@@ -383,9 +383,26 @@ esp_err_t esp_mqtt_set_config(esp_mqtt_client_handle_t client, const esp_mqtt_cl
383383 });
384384 }
385385
386+ mqtt_msg_buffer_destroy (& client -> mqtt_state .connection );
387+ int buffer_size = config -> buffer .size ;
388+ if (buffer_size <= 0 ) {
389+ buffer_size = MQTT_BUFFER_SIZE_BYTE ;
390+ }
391+
392+ // use separate value for output buffer size if configured
393+ int out_buffer_size = config -> buffer .out_size > 0 ? config -> buffer .out_size : buffer_size ;
394+ if (mqtt_msg_buffer_init (& client -> mqtt_state .connection , out_buffer_size ) != ESP_OK ) {
395+ goto _mqtt_set_config_failed ;
396+ }
397+
398+ free (client -> mqtt_state .in_buffer );
399+ client -> mqtt_state .in_buffer = (uint8_t * )malloc (buffer_size );
400+ ESP_MEM_CHECK (TAG , client -> mqtt_state .in_buffer , goto _mqtt_set_config_failed );
401+ client -> mqtt_state .in_buffer_length = buffer_size ;
402+
386403 client -> config -> message_retransmit_timeout = config -> session .message_retransmit_timeout ;
387404 if (config -> session .message_retransmit_timeout <= 0 ) {
388- client -> config -> message_retransmit_timeout = 1000 ;
405+ client -> config -> message_retransmit_timeout = MQTT_DEFAULT_RETRANSMIT_TIMEOUT_MS ;
389406 }
390407
391408 client -> config -> task_prio = config -> task .priority ;
@@ -599,6 +616,8 @@ void esp_mqtt_destroy_config(esp_mqtt_client_handle_t client)
599616 if (client -> config == NULL ) {
600617 return ;
601618 }
619+ free (client -> mqtt_state .in_buffer );
620+ mqtt_msg_buffer_destroy (& client -> mqtt_state .connection );
602621 free (client -> config -> host );
603622 free (client -> config -> uri );
604623 free (client -> config -> path );
@@ -807,6 +826,11 @@ static bool create_client_data(esp_mqtt_client_handle_t client)
807826 client -> api_lock = xSemaphoreCreateRecursiveMutex ();
808827 ESP_MEM_CHECK (TAG , client -> api_lock , return false );
809828
829+ client -> outbox = outbox_init ();
830+ ESP_MEM_CHECK (TAG , client -> outbox , return false );
831+ client -> status_bits = xEventGroupCreate ();
832+ ESP_MEM_CHECK (TAG , client -> status_bits , return false );
833+
810834 return true;
811835}
812836
@@ -824,24 +848,6 @@ esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *co
824848 if (!create_client_data (client )) {
825849 goto _mqtt_init_failed ;
826850 }
827- int buffer_size = config -> buffer .size ;
828- if (buffer_size <= 0 ) {
829- buffer_size = MQTT_BUFFER_SIZE_BYTE ;
830- }
831-
832- // use separate value for output buffer size if configured
833- int out_buffer_size = config -> buffer .out_size > 0 ? config -> buffer .out_size : buffer_size ;
834- if (mqtt_msg_buffer_init (& client -> mqtt_state .connection , out_buffer_size ) != ESP_OK ) {
835- goto _mqtt_init_failed ;
836- }
837-
838- client -> mqtt_state .in_buffer = (uint8_t * )malloc (buffer_size );
839- ESP_MEM_CHECK (TAG , client -> mqtt_state .in_buffer , goto _mqtt_init_failed );
840- client -> mqtt_state .in_buffer_length = buffer_size ;
841- client -> outbox = outbox_init ();
842- ESP_MEM_CHECK (TAG , client -> outbox , goto _mqtt_init_failed );
843- client -> status_bits = xEventGroupCreate ();
844- ESP_MEM_CHECK (TAG , client -> status_bits , goto _mqtt_init_failed );
845851
846852 if (esp_mqtt_set_config (client , config ) != ESP_OK ) {
847853 goto _mqtt_init_failed ;
@@ -890,8 +896,6 @@ esp_err_t esp_mqtt_client_destroy(esp_mqtt_client_handle_t client)
890896 if (client -> status_bits ) {
891897 vEventGroupDelete (client -> status_bits );
892898 }
893- free (client -> mqtt_state .in_buffer );
894- mqtt_msg_buffer_destroy (& client -> mqtt_state .connection );
895899 if (client -> api_lock ) {
896900 vSemaphoreDelete (client -> api_lock );
897901 }
0 commit comments