Initialize transaction history if empty

This commit is contained in:
Ilya Kitaev 2016-10-05 19:01:26 +03:00
parent 85f5e73d9c
commit db3282cdf0
3 changed files with 11 additions and 2 deletions

View File

@ -79,6 +79,9 @@ std::vector<TransactionInfo *> TransactionHistoryImpl::getAll() const
void TransactionHistoryImpl::refresh() void TransactionHistoryImpl::refresh()
{ {
// multithreaded access:
boost::lock_guard<boost::mutex> guarg(m_refreshMutex);
// TODO: configurable values; // TODO: configurable values;
uint64_t min_height = 0; uint64_t min_height = 0;
uint64_t max_height = (uint64_t)-1; uint64_t max_height = (uint64_t)-1;
@ -88,8 +91,6 @@ void TransactionHistoryImpl::refresh()
delete t; delete t;
m_history.clear(); m_history.clear();
// transactions are stored in wallet2: // transactions are stored in wallet2:
// - confirmed_transfer_details - out transfers // - confirmed_transfer_details - out transfers
// - unconfirmed_transfer_details - pending out transfers // - unconfirmed_transfer_details - pending out transfers

View File

@ -29,6 +29,7 @@
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
#include "wallet/wallet2_api.h" #include "wallet/wallet2_api.h"
#include <boost/thread/mutex.hpp>
namespace Bitmonero { namespace Bitmonero {
@ -51,6 +52,7 @@ private:
// TransactionHistory is responsible of memory management // TransactionHistory is responsible of memory management
std::vector<TransactionInfo*> m_history; std::vector<TransactionInfo*> m_history;
WalletImpl *m_wallet; WalletImpl *m_wallet;
boost::mutex m_refreshMutex;
}; };
} }

View File

@ -723,6 +723,12 @@ void WalletImpl::doRefresh()
boost::lock_guard<boost::mutex> guarg(m_refreshMutex2); boost::lock_guard<boost::mutex> guarg(m_refreshMutex2);
try { try {
m_wallet->refresh(); m_wallet->refresh();
// assuming if we have empty history, it wasn't initialized yet
// for futher history changes client need to update history in
// "on_money_received" and "on_money_sent" callbacks
if (m_history->count() == 0) {
m_history->refresh();
}
} catch (const std::exception &e) { } catch (const std::exception &e) {
m_status = Status_Error; m_status = Status_Error;
m_errorString = e.what(); m_errorString = e.what();