aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wallet/api/wallet.cpp20
-rw-r--r--src/wallet/api/wallet.h4
2 files changed, 18 insertions, 6 deletions
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index 2322cac76..67d2ebecb 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<std::mutex> 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 68ca364cf..9a290e0bc 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<bool> m_refreshEnabled;
std::atomic<bool> m_refreshThreadDone;
std::atomic<int> 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;