libwallet_api: TransactionHistory: read/write syncchronization

This commit is contained in:
Ilya Kitaev 2016-10-06 23:25:43 +03:00
parent 559f379327
commit 11fab41c36
2 changed files with 21 additions and 14 deletions

View file

@ -60,12 +60,24 @@ TransactionHistoryImpl::~TransactionHistoryImpl()
int TransactionHistoryImpl::count() const
{
boost::lock_guard<boost::mutex> guarg(m_historyMutex);
return m_history.size();
boost::shared_lock<boost::shared_mutex> lock(m_historyMutex);
int result = m_history.size();
return result;
}
TransactionInfo *TransactionHistoryImpl::transaction(int index) const
{
boost::shared_lock<boost::shared_mutex> lock(m_historyMutex);
// sanity check
if (index < 0)
return nullptr;
unsigned index_ = static_cast<unsigned>(index);
return index_ < m_history.size() ? m_history[index_] : nullptr;
}
TransactionInfo *TransactionHistoryImpl::transaction(const std::string &id) const
{
boost::shared_lock<boost::shared_mutex> lock(m_historyMutex);
auto itr = std::find_if(m_history.begin(), m_history.end(),
[&](const TransactionInfo * ti) {
return ti->hash() == id;
@ -75,13 +87,16 @@ TransactionInfo *TransactionHistoryImpl::transaction(const std::string &id) cons
std::vector<TransactionInfo *> TransactionHistoryImpl::getAll() const
{
boost::shared_lock<boost::shared_mutex> lock(m_historyMutex);
return m_history;
}
void TransactionHistoryImpl::refresh()
{
// multithreaded access:
boost::lock_guard<boost::mutex> guarg(m_historyMutex);
// boost::lock_guard<boost::mutex> guarg(m_historyMutex);
// for "write" access, locking exclusively
boost::unique_lock<boost::shared_mutex> lock(m_historyMutex);
// TODO: configurable values;
uint64_t min_height = 0;
@ -190,16 +205,8 @@ void TransactionHistoryImpl::refresh()
ti->m_timestamp = pd.m_timestamp;
m_history.push_back(ti);
}
}
TransactionInfo *TransactionHistoryImpl::transaction(int index) const
{
// sanity check
if (index < 0)
return nullptr;
unsigned index_ = static_cast<unsigned>(index);
return index_ < m_history.size() ? m_history[index_] : nullptr;
}
}

View file

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