diff --git a/apps/shared/wallet/src/LogosWalletProvider.cpp b/apps/shared/wallet/src/LogosWalletProvider.cpp index 62cdbf4..03220af 100644 --- a/apps/shared/wallet/src/LogosWalletProvider.cpp +++ b/apps/shared/wallet/src/LogosWalletProvider.cpp @@ -581,7 +581,7 @@ void LogosWalletProvider::loadSnapshotAsync(quint64 generation, SnapshotCallback } auto finishOne = std::make_shared>(); - *finishOne = [this, generation, state, finishOne]() mutable { + *finishOne = [this, generation, state]() mutable { if (generation != m_generation || --state->remaining > 0) return; for (qsizetype index = 0; diff --git a/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp b/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp index 32ef3c0..c12c2fb 100644 --- a/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp +++ b/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp @@ -8,6 +8,8 @@ #include #include +#include + #include "FakeWalletProvider.h" #include "LogosWalletProvider.h" #include "WalletAccountModel.h" @@ -61,6 +63,7 @@ private slots: void controllerOwnsUiWalletFlow(); void controllerOpenDoesNotWaitForWalletSync(); void controllerStopsReachabilityChecksAfterDisconnect(); + void completedAsyncSnapshotReleasesCallback(); }; void LogosWalletProviderTest::adoptsOpenWalletAndCachesSnapshots() @@ -478,6 +481,29 @@ void LogosWalletProviderTest::controllerStopsReachabilityChecksAfterDisconnect() settings.clear(); } +void LogosWalletProviderTest::completedAsyncSnapshotReleasesCallback() +{ + LogosModules modules; + modules.logos_execution_zone.sequencerAddress = QStringLiteral("http://sequencer"); + LogosWalletProvider provider(&modules); + QVERIFY(provider.connect({}).ok()); + + bool completed = false; + std::weak_ptr callbackLifetime; + { + auto lifetime = std::make_shared(1); + callbackLifetime = lifetime; + provider.snapshotAsync(true, + [lifetime = std::move(lifetime), &completed](WalletSnapshot snapshot) { + QVERIFY(snapshot.ok()); + completed = true; + }); + } + + QVERIFY(completed); + QVERIFY(callbackLifetime.expired()); +} + QTEST_GUILESS_MAIN(LogosWalletProviderTest) #include "LogosWalletProviderTest.moc"