From 6091cc49ce37990b9427217a5286c8f5400a5383 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 6 Mar 2024 12:21:17 +0000 Subject: [PATCH 1/5] HttpUpgrader must relinquish ownership of stream to request. --- Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp | 2 +- .../OtaNetwork/src/include/Ota/Network/HttpUpgrader.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp index 90b893391f..62c11e5ee8 100644 --- a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp +++ b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp @@ -32,7 +32,7 @@ void HttpUpgrader::start() } request->setMethod(HTTP_GET); - request->setResponseStream(it.getStream()); + request->setResponseStream(it.releaseStream()); if(i == items.count() - 1) { request->onRequestComplete(RequestCompletedDelegate(&HttpUpgrader::updateComplete, this)); diff --git a/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h b/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h index 957a19f148..9abfb82d9d 100644 --- a/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h +++ b/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h @@ -43,12 +43,12 @@ class HttpUpgrader : protected HttpClient { } - ReadWriteStream* getStream() + ReadWriteStream* releaseStream() { if(!stream) { - stream.reset(new Ota::UpgradeOutputStream(partition)); + return new Ota::UpgradeOutputStream(partition); } - return stream.get(); + return stream.release(); } }; From 349d02390463d08e987781c1e40a47d9623f2114 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 6 Mar 2024 14:45:11 +0000 Subject: [PATCH 2/5] Revert "HttpUpgrader must relinquish ownership of stream to request." This reverts commit 6091cc49ce37990b9427217a5286c8f5400a5383. --- Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp | 2 +- .../OtaNetwork/src/include/Ota/Network/HttpUpgrader.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp index 62c11e5ee8..90b893391f 100644 --- a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp +++ b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp @@ -32,7 +32,7 @@ void HttpUpgrader::start() } request->setMethod(HTTP_GET); - request->setResponseStream(it.releaseStream()); + request->setResponseStream(it.getStream()); if(i == items.count() - 1) { request->onRequestComplete(RequestCompletedDelegate(&HttpUpgrader::updateComplete, this)); diff --git a/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h b/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h index 9abfb82d9d..957a19f148 100644 --- a/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h +++ b/Sming/Libraries/OtaNetwork/src/include/Ota/Network/HttpUpgrader.h @@ -43,12 +43,12 @@ class HttpUpgrader : protected HttpClient { } - ReadWriteStream* releaseStream() + ReadWriteStream* getStream() { if(!stream) { - return new Ota::UpgradeOutputStream(partition); + stream.reset(new Ota::UpgradeOutputStream(partition)); } - return stream.release(); + return stream.get(); } }; From 49d59f0859b0db92d4d00a5d4079484266588175 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 6 Mar 2024 14:49:26 +0000 Subject: [PATCH 3/5] Need to keep reference to stream until completed (or failed). --- Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp index 90b893391f..a263619c91 100644 --- a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp +++ b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp @@ -49,17 +49,19 @@ void HttpUpgrader::start() int HttpUpgrader::itemComplete(HttpConnection& client, bool success) { + auto& it = items[currentItem]; + if(!success) { + it.stream.release(); // Owned by HttpRequest updateFailed(); return -1; } - auto& it = items[currentItem]; debug_d("Finished: URL: %s, Offset: 0x%X, Length: %u", it.url.c_str(), it.partition.address(), it.stream->available()); it.size = it.stream->available(); - it.stream = nullptr; // the actual deletion will happen outside of this class + it.stream.release(); // the actual deletion will happen outside of this class currentItem++; return 0; From fcc707cde7015b7a705098e226493b56b467c0a3 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 6 Mar 2024 15:18:52 +0000 Subject: [PATCH 4/5] Redundant code: failure is already handled by `itemComplete()` --- Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp index a263619c91..a45be2c22f 100644 --- a/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp +++ b/Sming/Libraries/OtaNetwork/src/HttpUpgrader.cpp @@ -79,11 +79,6 @@ int HttpUpgrader::updateComplete(HttpConnection& client, bool success) debug_d(" - item: %u, addr: 0x%X, url: %s", i, items[i].partition.address(), items[i].url.c_str()); } - if(!success) { - updateFailed(); - return -1; - } - if(updateDelegate) { updateDelegate(*this, true); } From d2de1b4baa954d0581cdc3878158255cbd08db06 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 6 Mar 2024 15:24:08 +0000 Subject: [PATCH 5/5] Fix RbootHttpUpdater --- .../Components/rboot/src/Network/RbootHttpUpdater.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Sming/Components/rboot/src/Network/RbootHttpUpdater.cpp b/Sming/Components/rboot/src/Network/RbootHttpUpdater.cpp index 883dd60dad..95bf2a843a 100644 --- a/Sming/Components/rboot/src/Network/RbootHttpUpdater.cpp +++ b/Sming/Components/rboot/src/Network/RbootHttpUpdater.cpp @@ -49,17 +49,19 @@ void RbootHttpUpdater::start() int RbootHttpUpdater::itemComplete(HttpConnection& client, bool success) { + auto& it = items[currentItem]; + if(!success) { + it.stream.release(); // Owned by HttpRequest updateFailed(); return -1; } - auto& it = items[currentItem]; debug_d("Finished: URL: %s, Offset: 0x%X, Length: %u", it.url.c_str(), it.stream->getStartAddress(), it.stream->available()); it.size = it.stream->available(); - it.stream = nullptr; // the actual deletion will happen outside of this class + it.stream.release(); // the actual deletion will happen outside of this class currentItem++; return 0; @@ -77,11 +79,6 @@ int RbootHttpUpdater::updateComplete(HttpConnection& client, bool success) debug_d(" - item: %u, addr: 0x%X, url: %s", i, items[i].targetOffset, items[i].url.c_str()); } - if(!success) { - updateFailed(); - return -1; - } - if(updateDelegate) { updateDelegate(*this, true); }