From 75c3d2dd26207e7489afdc8a8e6a05e17892c3ce Mon Sep 17 00:00:00 2001 From: Leif Date: Fri, 25 Dec 2020 16:53:33 +0700 Subject: [PATCH 1/3] OTA upload often fails when client.read() return -1 and we subsequently try to write 4 gigabytes to flash. Fixed by signed comparison and retry. --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index fe85580f566..0c96f7efd22 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -315,6 +315,10 @@ void ArduinoOTAClass::_runUpdate() { size_t r = client.read(buf, available); if(r != available){ log_w("didn't read enough! %u != %u", r, available); + if((int32_t) r<0){ + delay(50); + continue; //let's not try to write 4 gigabytes when client.read returns -1 + } } written = Update.write(buf, r); From 4a5b31d088d82d29ae1a62c244175321822bb7d6 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Thu, 25 Jan 2024 09:39:20 -0300 Subject: [PATCH 2/3] Delay of 1ms already solves the issue --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index 8a73f457336..975f17e6b49 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -316,7 +316,7 @@ void ArduinoOTAClass::_runUpdate() { if(r != available){ log_w("didn't read enough! %u != %u", r, available); if((int32_t) r<0){ - delay(50); + delay(1); continue; //let's not try to write 4 gigabytes when client.read returns -1 } } From 13d61f58aab9f87853457da059786254d24ece88 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Fri, 26 Jan 2024 12:15:56 -0300 Subject: [PATCH 3/3] Update libraries/ArduinoOTA/src/ArduinoOTA.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index 975f17e6b49..ee9c3e95301 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -315,10 +315,10 @@ void ArduinoOTAClass::_runUpdate() { size_t r = client.read(buf, available); if(r != available){ log_w("didn't read enough! %u != %u", r, available); - if((int32_t) r<0){ - delay(1); - continue; //let's not try to write 4 gigabytes when client.read returns -1 - } + if((int32_t) r<0) { + delay(1); + continue; //let's not try to write 4 gigabytes when client.read returns -1 + } } written = Update.write(buf, r);