fix(esp_http_server): Async handler example stack overflow fix

1. In async handler example, on hitting /long URI and closing the
connection forcefully from client (example ctrl + c) cause more stack
size (almost 200 bytes) than successfull request.
2. The connection should be closed from the server as soon as the client
closes the connect (i.e. handler should return ESP_FAIL to close the
connection)
This commit is contained in:
hrushikesh.bhosale
2025-04-25 11:00:10 +05:30
parent fe6f2d08af
commit 5722889fe3
2 changed files with 22 additions and 4 deletions

View File

@ -7,4 +7,10 @@ menu "Example Configuration"
The maximum number of simultaneous async requests that the
web server can handle.
config EXAMPLE_ASYNC_WORKER_TASK_STACK_SIZE
int "Async Worker Task Stack Size"
default 2560
help
The stack size allocated for each async worker task.
endmenu

View File

@ -32,7 +32,7 @@
*/
#define ASYNC_WORKER_TASK_PRIORITY 5
#define ASYNC_WORKER_TASK_STACK_SIZE 2048
#define ASYNC_WORKER_TASK_STACK_SIZE CONFIG_EXAMPLE_ASYNC_WORKER_TASK_STACK_SIZE
static const char *TAG = "example";
@ -133,7 +133,11 @@ static esp_err_t long_async_handler(httpd_req_t *req)
// send a request count
char s[100];
snprintf(s, sizeof(s), "<div>req: %u</div>\n", req_count);
httpd_resp_sendstr_chunk(req, s);
esp_err_t err = httpd_resp_sendstr_chunk(req, s);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to send string chunk: %s", esp_err_to_name(err));
return err;
}
// then every second, send a "tick"
for (int i = 0; i < 60; i++) {
@ -145,11 +149,19 @@ static esp_err_t long_async_handler(httpd_req_t *req)
// send a tick
snprintf(s, sizeof(s), "<div>%u</div>\n", i);
httpd_resp_sendstr_chunk(req, s);
err = httpd_resp_sendstr_chunk(req, s);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to send string chunk: %s", esp_err_to_name(err));
return err;
}
}
// send "complete"
httpd_resp_sendstr_chunk(req, NULL);
err = httpd_resp_sendstr_chunk(req, NULL);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to send string chunk: %s", esp_err_to_name(err));
return err;
}
return ESP_OK;
}