libwallet_api: TransactionHistory: read/write syncchronization
This commit is contained in:
parent
559f379327
commit
11fab41c36
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue