refreshing wallet even if error happened

This commit is contained in:
Ilya Kitaev 2016-07-14 13:33:49 +03:00
parent 6d32a3d16b
commit d7597c5961
2 changed files with 18 additions and 6 deletions

View File

@ -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

View File

@ -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;