diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 2322cac7..67d2ebec 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -643,7 +643,7 @@ void WalletImpl::refreshThreadFunc() LOG_PRINT_L3(__FUNCTION__ << ": refresh lock acquired..."); LOG_PRINT_L3(__FUNCTION__ << ": m_refreshEnabled: " << m_refreshEnabled); LOG_PRINT_L3(__FUNCTION__ << ": m_status: " << m_status); - if (m_refreshEnabled && m_status == Status_Ok) { + if (m_refreshEnabled /*&& m_status == Status_Ok*/) { LOG_PRINT_L3(__FUNCTION__ << ": refreshing..."); doRefresh(); } @@ -657,16 +657,16 @@ void WalletImpl::doRefresh() std::lock_guard guarg(m_refreshMutex2); try { m_wallet->refresh(); - if (m_wallet2Callback->getListener()) { - m_wallet2Callback->getListener()->refreshed(); - } } catch (const std::exception &e) { m_status = Status_Error; m_errorString = e.what(); } + if (m_wallet2Callback->getListener()) { + m_wallet2Callback->getListener()->refreshed(); + } } -// supposed to be called from ctor only + void WalletImpl::startRefresh() { if (!m_refreshEnabled) { @@ -676,7 +676,7 @@ void WalletImpl::startRefresh() } -// supposed to be called from dtor only + void WalletImpl::stopRefresh() { if (!m_refreshThreadDone) { @@ -686,5 +686,13 @@ void WalletImpl::stopRefresh() } } +void WalletImpl::pauseRefresh() +{ + // TODO synchronize access + if (!m_refreshThreadDone) { + m_refreshEnabled = false; + } +} + } // namespace diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h index 68ca364c..9a290e0b 100644 --- a/src/wallet/api/wallet.h +++ b/src/wallet/api/wallet.h @@ -93,6 +93,7 @@ private: void doRefresh(); void startRefresh(); void stopRefresh(); + void pauseRefresh(); private: friend class PendingTransactionImpl; @@ -111,7 +112,10 @@ private: std::atomic m_refreshEnabled; std::atomic m_refreshThreadDone; std::atomic m_refreshIntervalSeconds; + // synchronizing refresh loop; std::mutex m_refreshMutex; + + // synchronizing sync and async refresh std::mutex m_refreshMutex2; std::condition_variable m_refreshCV; std::thread m_refreshThread;