@@ -449,6 +449,21 @@ static void destroy_and_free_resources(esp_websocket_client_handle_t client)
449
449
client = NULL ;
450
450
}
451
451
452
+ static esp_err_t stop_wait_task (esp_websocket_client_handle_t client )
453
+ {
454
+ /* A running client cannot be stopped from the websocket task/event handler */
455
+ TaskHandle_t running_task = xTaskGetCurrentTaskHandle ();
456
+ if (running_task == client -> task_handle ) {
457
+ ESP_LOGE (TAG , "Client cannot be stopped from websocket task" );
458
+ return ESP_FAIL ;
459
+ }
460
+
461
+ client -> run = false;
462
+ xEventGroupWaitBits (client -> status_bits , STOPPED_BIT , false, true, portMAX_DELAY );
463
+ client -> state = WEBSOCKET_STATE_UNKNOW ;
464
+ return ESP_OK ;
465
+ }
466
+
452
467
static esp_err_t set_websocket_transport_optional_settings (esp_websocket_client_handle_t client , const char * scheme )
453
468
{
454
469
esp_transport_handle_t trans = esp_transport_list_get_transport (client -> transport_list , scheme );
@@ -754,6 +769,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
754
769
ESP_WS_CLIENT_MEM_CHECK (TAG , client -> status_bits , {
755
770
goto _websocket_init_fail ;
756
771
});
772
+ xEventGroupSetBits (client -> status_bits , STOPPED_BIT );
757
773
758
774
client -> buffer_size = buffer_size ;
759
775
return client ;
@@ -768,9 +784,11 @@ esp_err_t esp_websocket_client_destroy(esp_websocket_client_handle_t client)
768
784
if (client == NULL ) {
769
785
return ESP_ERR_INVALID_ARG ;
770
786
}
771
- if (client -> run ) {
772
- esp_websocket_client_stop (client );
787
+
788
+ if (client -> status_bits && (STOPPED_BIT & xEventGroupGetBits (client -> status_bits )) == 0 ) {
789
+ stop_wait_task (client );
773
790
}
791
+
774
792
destroy_and_free_resources (client );
775
793
return ESP_OK ;
776
794
}
@@ -1159,23 +1177,13 @@ esp_err_t esp_websocket_client_stop(esp_websocket_client_handle_t client)
1159
1177
if (client == NULL ) {
1160
1178
return ESP_ERR_INVALID_ARG ;
1161
1179
}
1162
- if (!client -> run ) {
1163
- ESP_LOGW (TAG , "Client was not started" );
1164
- return ESP_FAIL ;
1165
- }
1166
1180
1167
- /* A running client cannot be stopped from the websocket task/event handler */
1168
- TaskHandle_t running_task = xTaskGetCurrentTaskHandle ();
1169
- if (running_task == client -> task_handle ) {
1170
- ESP_LOGE (TAG , "Client cannot be stopped from websocket task" );
1181
+ if (xEventGroupGetBits (client -> status_bits ) & STOPPED_BIT ) {
1182
+ ESP_LOGW (TAG , "Client was not started" );
1171
1183
return ESP_FAIL ;
1172
1184
}
1173
1185
1174
-
1175
- client -> run = false;
1176
- xEventGroupWaitBits (client -> status_bits , STOPPED_BIT , false, true, portMAX_DELAY );
1177
- client -> state = WEBSOCKET_STATE_UNKNOW ;
1178
- return ESP_OK ;
1186
+ return stop_wait_task (client );
1179
1187
}
1180
1188
1181
1189
static int esp_websocket_client_send_close (esp_websocket_client_handle_t client , int code , const char * additional_data , int total_len , TickType_t timeout )
0 commit comments