]> Nutra Git (v1) - gamesguru/feather.git/commitdiff
fix race condition when starting two instances at once
authorgg <chown_tee@proton.me>
Mon, 19 Jan 2026 03:21:45 +0000 (22:21 -0500)
committergg <chown_tee@proton.me>
Mon, 19 Jan 2026 03:21:45 +0000 (22:21 -0500)
src/libwalletqt/Wallet.cpp
src/libwalletqt/Wallet.h

index 79d9ee012732ed0b251ca90bef1336ba9f682fb4..3cba285795eb01c5e5da26ee15ae3d03e5ea35cf 100644 (file)
@@ -68,7 +68,7 @@ Wallet::Wallet(Monero::Wallet *wallet, QObject *parent)
     m_coinsModel = new CoinsModel(this, m_coins);
 
     if (this->status() == Status_Ok) {
-        startRefreshThread();
+        // startRefreshThread(); // Moved to startRefresh()
 
         // Store the wallet every 2 minutes
         m_storeTimer->start(2 * 60 * 1000);
@@ -481,6 +481,7 @@ void Wallet::initAsync(const QString &daemonAddress, bool trustedDaemon, quint64
 // #################### Synchronization (Refresh) ####################
 
 void Wallet::startRefresh() {
+    startRefreshThread();
     m_refreshEnabled = true;
     m_refreshNow = true;
 }
@@ -508,6 +509,11 @@ void Wallet::updateNetworkStatus() {
 
 void Wallet::startRefreshThread()
 {
+    bool expected = false;
+    if (!m_refreshThreadStarted.compare_exchange_strong(expected, true)) {
+        return;
+    }
+
     const auto future = m_scheduler.run([this] {
         // Beware! This code does not run in the GUI thread.
 
index 690966540a9f954501ed467fbe8237b5fa09ab53..7498df47ecc85c097f2b1a8d89814340953b02f4 100644 (file)
@@ -546,6 +546,7 @@ private:
     std::atomic<bool> m_rangeSyncActive{false};
     std::atomic<bool> m_syncPaused{false};
     std::atomic<int64_t> m_lastRefreshTime{0};
+    std::atomic<bool> m_refreshThreadStarted{false};
 };
 
 #endif // FEATHER_WALLET_H