mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-10-28 11:14:58 +00:00
fix(upload): restart after a firmware upload when the client closes the connection
uploadComplete() leaves _is_firmware / _is_filesystem set after a successful upload. When the client then closes the connection, handleDisconnect() sees the flags, treats it as an aborted upload and sets the status back to NORMAL, cancelling the pending restart. The WebUI gets away with it because its status poll turns the pending restart into a requested one first; an upload from curl or a script is accepted (md5_ok) but the device keeps running the old firmware until something else restarts it. Clear the flags once the upload has completed.
This commit is contained in:
@@ -33,6 +33,7 @@ This release is based on the latest Espressif/Arduino core version 3. It brings
|
|||||||
## Fixed
|
## Fixed
|
||||||
|
|
||||||
- restart from the WebUI (Restart button, firmware/settings upload) only happened while the browser tab stayed open. If the tab was closed the restart was silently dropped after 5 minutes, leaving a new firmware uninstalled. EMS-ESP now restarts on its own if the WebUI hasn't picked up the pending restart within 10 seconds
|
- restart from the WebUI (Restart button, firmware/settings upload) only happened while the browser tab stayed open. If the tab was closed the restart was silently dropped after 5 minutes, leaving a new firmware uninstalled. EMS-ESP now restarts on its own if the WebUI hasn't picked up the pending restart within 10 seconds
|
||||||
|
- a firmware upload from a script or `curl` was accepted (`md5_ok`) but EMS-ESP didn't restart into it: the client closing the connection after the upload was treated as an aborted upload, which cancelled the pending restart
|
||||||
- shunting yard show json
|
- shunting yard show json
|
||||||
- `system/sendmail` called from a Command or the Scheduler computed its value twice, which stripped the quotes from literal text and then failed on characters like `!`. Also shunting yard treated a `?` inside a quoted string as a ternary, so text like `"too hot?"` returned nothing
|
- `system/sendmail` called from a Command or the Scheduler computed its value twice, which stripped the quotes from literal text and then failed on characters like `!`. Also shunting yard treated a `?` inside a quoted string as a ternary, so text like `"too hot?"` returned nothing
|
||||||
- memory leak when using different timezones for ems-esp and thermostat[#3184](https://github.com/emsesp/EMS-ESP32/issues/3184)
|
- memory leak when using different timezones for ems-esp and thermostat[#3184](https://github.com/emsesp/EMS-ESP32/issues/3184)
|
||||||
|
|||||||
@@ -214,6 +214,10 @@ void UploadFileService::uploadComplete(AsyncWebServerRequest * request) {
|
|||||||
AsyncWebServerResponse * response = request->beginResponse(200);
|
AsyncWebServerResponse * response = request->beginResponse(200);
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
// the upload is done: clear the flags so handleDisconnect() doesn't treat the client closing the
|
||||||
|
// connection as an aborted upload and cancel the pending restart
|
||||||
|
_is_firmware = false;
|
||||||
|
_is_filesystem = false;
|
||||||
emsesp::EMSESP::system_.systemStatus(
|
emsesp::EMSESP::system_.systemStatus(
|
||||||
emsesp::SYSTEM_STATUS::SYSTEM_STATUS_PENDING_RESTART); // will be handled by the main loop. We use pending for the Web's SystemMonitor
|
emsesp::SYSTEM_STATUS::SYSTEM_STATUS_PENDING_RESTART); // will be handled by the main loop. We use pending for the Web's SystemMonitor
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user