From 5c3ffb4fd334691ace32cee9b57af08860a9839c Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 26 Nov 2012 15:52:59 -0800 Subject: [PATCH 1/8] If you need override a method, do it straight up, don't abuse events. Events are meant for managing asynchronous activity. Don't replace normal method calls with events. Look at the implementation for request() in the removed code. We can see that an event is being emitted, but the code catching it could be anywhere in this file or a different file or even in multiple places. Code containing too many events quickly becomes unmaintainable. Events are the most complex tool we have, callbacks are less complex and synchronous calls are the least complex. Use the least complex tool that can solve your problem. --- src/js/remote.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index af2e01289..8ebadb6a2 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -39,23 +39,16 @@ var Request = function (remote, command) { }; this.remote = remote; this.requested = false; - - this.on('request', function () { - self.request_default(); - }); }; Request.prototype = new EventEmitter; // Send the request to a remote. Request.prototype.request = function (remote) { - this.emit('request', remote); -}; - -Request.prototype.request_default = function () { if (!this.requested) { this.requested = true; this.remote.request(this); + this.emit('request', remote); } }; @@ -595,7 +588,8 @@ Remote.prototype.request_ledger_entry = function (type) { this.type = type; // Transparent caching: - request.on('request', function (remote) { // Intercept default request. + this.request_default = this.request; + this.request = function () { // Intercept default request. if (self._ledger_hash) { // XXX Add caching. } @@ -613,7 +607,7 @@ Remote.prototype.request_ledger_entry = function (type) { if (node) { // Emulate fetch of ledger entry. - this.request.emit('success', { + self.emit('success', { // YYY Missing lots of fields. 'node' : node, }); @@ -637,7 +631,7 @@ Remote.prototype.request_ledger_entry = function (type) { this.request_default(); } } - }); + }; return request; }; From e94765d0da3e58da8315b27fda076760379a928b Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 26 Nov 2012 18:01:39 -0800 Subject: [PATCH 2/8] Fix for non-native currencies in parse_human. --- src/js/amount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/amount.js b/src/js/amount.js index 8921a5092..afb652f46 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -597,7 +597,7 @@ Amount.prototype.parse_human = function(j) { this._is_native = false; var multiplier = consts.bi_10.clone().pow(precision); - this._value = this._value.multiply(multiplier).add(fraction); + this._value = this._value.multiply(multiplier).add(new BigInteger(fraction)); this._offset = -precision; this.canonicalize(); From f1f7ccda520689c61dc25d0ec0cc603ff84a1609 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 26 Nov 2012 18:03:32 -0800 Subject: [PATCH 3/8] Add digit group separator formatting to to_human(). --- src/js/amount.js | 18 ++++++++++++++++-- src/js/utils.js | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/js/amount.js b/src/js/amount.js index afb652f46..b50d4e39a 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -478,8 +478,15 @@ Amount.prototype.to_human = function (opts) { opts = opts || {}; - var int_part = this._value.divide(consts.bi_xns_unit).toString(10); - var fraction_part = this._value.mod(consts.bi_xns_unit).toString(10); + // Default options + if ("undefined" === typeof opts.group_sep) opts.group_sep = true; + opts.group_width = opts.group_width || 3; + + var denominator = this._is_native ? + consts.bi_xns_unit : + consts.bi_10.clone().pow(-this._offset); + var int_part = this._value.divide(denominator).toString(10); + var fraction_part = this._value.mod(denominator).toString(10); int_part = int_part.replace(/^0*/, ''); fraction_part = fraction_part.replace(/0*$/, ''); @@ -488,6 +495,13 @@ Amount.prototype.to_human = function (opts) fraction_part = fraction_part.slice(0, opts.precision); } + if (opts.group_sep) { + if ("string" !== typeof opts.group_sep) { + opts.group_sep = ','; + } + int_part = utils.chunkString(int_part, opts.group_width, true).join(opts.group_sep); + } + var formatted = ''; formatted += int_part.length ? int_part : '0'; formatted += fraction_part.length ? '.'+fraction_part : ''; diff --git a/src/js/utils.js b/src/js/utils.js index 563969fee..31d2a72d6 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -70,6 +70,19 @@ var stringToArray = function (s) { return a; }; +var chunkString = function (str, n, leftAlign) { + var ret = []; + var i=0, len=str.length; + if (leftAlign) { + i = str.length % n; + if (i) ret.push(str.slice(0, i)); + } + for(; i < len; i += n) { + ret.push(str.slice(i, n+i)); + } + return ret; +}; + var logObject = function (msg, obj) { console.log(msg, JSON.stringify(obj, undefined, 2)); }; @@ -81,5 +94,6 @@ exports.hexToString = hexToString; exports.stringToArray = stringToArray; exports.stringToHex = stringToHex; exports.logObject = logObject; +exports.chunkString = chunkString; // vim:sw=2:sts=2:ts=8:et From 725761d60e2f8524970e72157d1195bdae18ee71 Mon Sep 17 00:00:00 2001 From: Jed Date: Tue, 27 Nov 2012 16:44:56 -0800 Subject: [PATCH 4/8] Remove a C++11 warning. --- src/cpp/ripple/Wallet.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Wallet.cpp b/src/cpp/ripple/Wallet.cpp index 1d21fb5eb..8843e693c 100644 --- a/src/cpp/ripple/Wallet.cpp +++ b/src/cpp/ripple/Wallet.cpp @@ -78,7 +78,7 @@ bool Wallet::nodeIdentityCreate() { #ifdef CREATE_NEW_DH_PARAMS std::string strDh512 = DH_der_gen(512); #else - static char dh512Param[] = { + static const unsigned char dh512Param[] = { 0x30, 0x46, 0x02, 0x41, 0x00, 0x98, 0x15, 0xd2, 0xd0, 0x08, 0x32, 0xda, 0xaa, 0xac, 0xc4, 0x71, 0xa3, 0x1b, 0x11, 0xf0, 0x6c, 0x62, 0xb2, 0x35, 0x8a, 0x10, 0x92, 0xc6, 0x0a, 0xa3, 0x84, 0x7e, 0xaf, 0x17, 0x29, 0x0b, @@ -86,7 +86,7 @@ bool Wallet::nodeIdentityCreate() { 0x6e, 0xdb, 0x57, 0x72, 0x4a, 0x7e, 0xcd, 0xaf, 0xbd, 0x3a, 0x97, 0x55, 0x51, 0x77, 0x5a, 0x34, 0x7c, 0xe8, 0xc5, 0x71, 0x63, 0x02, 0x01, 0x02 }; - std::string strDh512(dh512Param, sizeof(dh512Param)); + std::string strDh512(reinterpret_cast(dh512Param), sizeof(dh512Param)); #endif From 6aca65ff76d41a6fd2480d178febb4e56c539bbe Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 28 Nov 2012 15:27:20 -0800 Subject: [PATCH 5/8] Get the shared pointers out of the scoped lock stuff. We don't need it. --- src/cpp/ripple/Application.h | 2 +- src/cpp/ripple/HashedObject.cpp | 6 +++--- src/cpp/ripple/Ledger.cpp | 2 +- src/cpp/ripple/LedgerConsensus.cpp | 2 +- src/cpp/ripple/NetworkOPs.cpp | 4 ++-- src/cpp/ripple/RPCHandler.cpp | 2 +- src/cpp/ripple/ScopedLock.h | 6 ++++-- src/cpp/ripple/Transaction.cpp | 2 +- 8 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index 343d59263..a7518299e 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -35,7 +35,7 @@ public: DatabaseCon(const std::string& name, const char *initString[], int countInit); ~DatabaseCon(); Database* getDB() { return mDatabase; } - ScopedLock getDBLock() { return ScopedLock(mLock); } + boost::recursive_mutex& getDBLock() { return mLock; } }; class Application diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 7765574ad..d64e33a64 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -53,7 +53,7 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, void HashedObjectStore::waitWrite() { - boost::unique_lock sl(mWriteMutex); + boost::mutex::scoped_lock sl(mWriteMutex); while (mWritePending) mWriteCondition.wait(sl); } @@ -67,7 +67,7 @@ void HashedObjectStore::bulkWrite() set.reserve(128); { - boost::unique_lock sl(mWriteMutex); + boost::mutex::scoped_lock sl(mWriteMutex); mWriteSet.swap(set); assert(mWriteSet.empty()); if (set.empty()) @@ -85,7 +85,7 @@ void HashedObjectStore::bulkWrite() Database* db = theApp->getHashNodeDB()->getDB(); { - ScopedLock sl = theApp->getHashNodeDB()->getDBLock(); + ScopedLock sl( theApp->getHashNodeDB()->getDBLock()); db->executeSQL("BEGIN TRANSACTION;"); diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 334f56154..1f1b2e565 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -369,7 +369,7 @@ void Ledger::saveAcceptedLedger(bool fromConsensus) SHAMap& txSet = *peekTransactionMap(); Database *db = theApp->getTxnDB()->getDB(); - ScopedLock dbLock = theApp->getTxnDB()->getDBLock(); + ScopedLock dbLock(theApp->getTxnDB()->getDBLock()); db->executeSQL("BEGIN TRANSACTION;"); SHAMapTreeNode::TNType type; for (SHAMapItem::pointer item = txSet.peekFirstItem(type); !!item; diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index ef32c1153..e3e867d90 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1251,7 +1251,7 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) cLog(lsINFO) << "CNF newLCL " << newLCLHash; Ledger::pointer newOL = boost::make_shared(true, boost::ref(*newLCL)); - ScopedLock sl = theApp->getLedgerMaster().getLock(); + ScopedLock sl( theApp->getLedgerMaster().getLock()); // Apply disputed transactions that didn't get in TransactionEngine engine(newOL); diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 97adc8e9f..cd2c13af4 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -888,7 +888,7 @@ std::vector< std::pair > { Database* db = theApp->getTxnDB()->getDB(); - ScopedLock dbLock = theApp->getTxnDB()->getDBLock(); + ScopedLock sl(theApp->getTxnDB()->getDBLock()); SQL_FOREACH(db, sql) { @@ -909,7 +909,7 @@ std::vector RippleAddress acct; { Database* db = theApp->getTxnDB()->getDB(); - ScopedLock dblock = theApp->getTxnDB()->getDBLock(); + ScopedLock sl(theApp->getTxnDB()->getDBLock()); SQL_FOREACH(db, sql) { if (acct.setAccountID(db->getStrBinary("Account"))) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 1765efcdf..bed264410 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1158,7 +1158,7 @@ Json::Value RPCHandler::doTxHistory(const Json::Value& params) { Database* db = theApp->getTxnDB()->getDB(); - ScopedLock dbLock = theApp->getTxnDB()->getDBLock(); + ScopedLock sl (theApp->getTxnDB()->getDBLock()); SQL_FOREACH(db, sql) { diff --git a/src/cpp/ripple/ScopedLock.h b/src/cpp/ripple/ScopedLock.h index 5f85b83ed..e0859fd77 100644 --- a/src/cpp/ripple/ScopedLock.h +++ b/src/cpp/ripple/ScopedLock.h @@ -6,16 +6,18 @@ #include #include +typedef boost::recursive_mutex::scoped_lock ScopedLock; + // A lock holder that can be returned and copied by value // When the last reference goes away, the lock is released -class ScopedLock +class SharedScopedLock { protected: mutable boost::shared_ptr mHolder; public: - ScopedLock(boost::recursive_mutex& mutex) : + SharedScopedLock(boost::recursive_mutex& mutex) : mHolder(boost::make_shared(boost::ref(mutex))) { ; } void lock() const { mHolder->lock(); } diff --git a/src/cpp/ripple/Transaction.cpp b/src/cpp/ripple/Transaction.cpp index 304494826..be3c21752 100644 --- a/src/cpp/ripple/Transaction.cpp +++ b/src/cpp/ripple/Transaction.cpp @@ -150,7 +150,7 @@ bool Transaction::save() % mTransaction->getTransactionID().GetHex()); Database *db = theApp->getTxnDB()->getDB(); - ScopedLock dbLock = theApp->getTxnDB()->getDBLock(); + ScopedLock dbLock(theApp->getTxnDB()->getDBLock()); if (SQL_EXISTS(db, exists)) return false; return db->executeSQL(mTransaction->getSQLInsertHeader() + mTransaction->getSQL(getLedger(), status) + ";"); From bfbf0aa18567c9abf738cc7c00d1c14313a88aa8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 28 Nov 2012 15:34:47 -0800 Subject: [PATCH 6/8] Eliminate redundant write set waits. You don't need to wait on future write sets. --- src/cpp/ripple/HashedObject.cpp | 8 +++++--- src/cpp/ripple/HashedObject.h | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index d64e33a64..fe94aaf04 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -12,7 +12,7 @@ SETUP_LOG(); DECLARE_INSTANCE(HashedObject); HashedObjectStore::HashedObjectStore(int cacheSize, int cacheAge) : - mCache("HashedObjectStore", cacheSize, cacheAge), mWritePending(false) + mCache("HashedObjectStore", cacheSize, cacheAge), mWritePending(false), mWriteGeneration(0) { mWriteSet.reserve(128); } @@ -54,7 +54,8 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, void HashedObjectStore::waitWrite() { boost::mutex::scoped_lock sl(mWriteMutex); - while (mWritePending) + int gen = mWriteGeneration; + while (mWritePending && (mWriteGeneration == gen)) mWriteCondition.wait(sl); } @@ -70,10 +71,11 @@ void HashedObjectStore::bulkWrite() boost::mutex::scoped_lock sl(mWriteMutex); mWriteSet.swap(set); assert(mWriteSet.empty()); + ++mWriteGeneration; + mWriteCondition.notify_all(); if (set.empty()) { mWritePending = false; - mWriteCondition.notify_all(); return; } } diff --git a/src/cpp/ripple/HashedObject.h b/src/cpp/ripple/HashedObject.h index 20a187fb7..69c5e55f7 100644 --- a/src/cpp/ripple/HashedObject.h +++ b/src/cpp/ripple/HashedObject.h @@ -47,8 +47,9 @@ class HashedObjectStore protected: TaggedCache mCache; - boost::mutex mWriteMutex; - boost::condition_variable mWriteCondition; + boost::mutex mWriteMutex; + boost::condition_variable mWriteCondition; + int mWriteGeneration; std::vector< boost::shared_ptr > mWriteSet; bool mWritePending; From 8ba70c73f619efd503104c508dd047a69eb538b6 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 28 Nov 2012 15:35:12 -0800 Subject: [PATCH 7/8] Make some boost::format objects static. --- src/cpp/ripple/Transaction.cpp | 7 ++++--- src/cpp/ripple/utils.h | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Transaction.cpp b/src/cpp/ripple/Transaction.cpp index be3c21752..5305c784f 100644 --- a/src/cpp/ripple/Transaction.cpp +++ b/src/cpp/ripple/Transaction.cpp @@ -146,12 +146,13 @@ bool Transaction::save() default: status = TXN_SQL_UNKNOWN; } - std::string exists = boost::str(boost::format("SELECT Status FROM Transactions WHERE TransID = '%s';") - % mTransaction->getTransactionID().GetHex()); + static boost::format selStat("SELECT Status FROM Transactions WHERE TransID = '%s';"); + std::string exists = boost::str(selStat % mTransaction->getTransactionID().GetHex()); Database *db = theApp->getTxnDB()->getDB(); ScopedLock dbLock(theApp->getTxnDB()->getDBLock()); - if (SQL_EXISTS(db, exists)) return false; + if (SQL_EXISTS(db, exists)) + return false; return db->executeSQL(mTransaction->getSQLInsertHeader() + mTransaction->getSQL(getLedger(), status) + ";"); } diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index 7667df578..c6568d510 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -154,7 +154,8 @@ inline std::string strHex(const uint64 uiHost) inline static std::string sqlEscape(const std::string& strSrc) { - return str(boost::format("X'%s'") % strHex(strSrc)); + static boost::format f("X'%s'"); + return str(f % strHex(strSrc)); } template From 72777b6b839a66e6c5b8d4cf374ae914a147566c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 28 Nov 2012 15:53:07 -0800 Subject: [PATCH 8/8] Remove some shared pointers on load monitors. --- src/cpp/ripple/HashedObject.cpp | 2 +- src/cpp/ripple/JobQueue.h | 2 ++ src/cpp/ripple/Ledger.cpp | 8 ++++---- src/cpp/ripple/Ledger.h | 3 ++- src/cpp/ripple/LoadMonitor.h | 3 ++- src/cpp/ripple/NetworkOPs.cpp | 2 +- src/cpp/ripple/Peer.cpp | 2 +- src/cpp/ripple/RPCHandler.cpp | 2 +- src/cpp/ripple/ValidationCollection.cpp | 2 +- 9 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index fe94aaf04..d430272a3 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -61,7 +61,7 @@ void HashedObjectStore::waitWrite() void HashedObjectStore::bulkWrite() { - LoadEvent::pointer event = theApp->getJobQueue().getLoadEvent(jtDISK); + LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtDISK)); while (1) { std::vector< boost::shared_ptr > set; diff --git a/src/cpp/ripple/JobQueue.h b/src/cpp/ripple/JobQueue.h index ca91a06f1..6dc495da7 100644 --- a/src/cpp/ripple/JobQueue.h +++ b/src/cpp/ripple/JobQueue.h @@ -104,6 +104,8 @@ public: LoadEvent::pointer getLoadEvent(JobType t) { return boost::make_shared(boost::ref(mJobLoads[t]), true, 1); } + LoadEvent::autoptr getLoadEventAP(JobType t) + { return LoadEvent::autoptr(new LoadEvent(mJobLoads[t], true, 1)); } Json::Value getJson(int c = 0); }; diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 1f1b2e565..2e9482e0f 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -339,9 +339,8 @@ uint256 Ledger::getHash() return mHash; } -void Ledger::saveAcceptedLedger(bool fromConsensus) +void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) { // can be called in a different thread - LoadEvent::pointer event = theApp->getJobQueue().getLoadEvent(jtDISK); cLog(lsTRACE) << "saveAcceptedLedger " << (fromConsensus ? "fromConsensus " : "fromAcquire ") << getLedgerSeq(); static boost::format ledgerExists("SELECT LedgerSeq FROM Ledgers where LedgerSeq = %d;"); static boost::format deleteLedger("DELETE FROM Ledgers WHERE LedgerSeq = %d;"); @@ -439,7 +438,7 @@ void Ledger::saveAcceptedLedger(bool fromConsensus) } theApp->getLedgerMaster().setFullLedger(shared_from_this()); - event = LoadEvent::pointer(); + event->stop(); theApp->getOPs().pubLedger(shared_from_this()); @@ -1136,7 +1135,8 @@ void Ledger::pendSave(bool fromConsensus) if (!fromConsensus && !theApp->isNewFlag(getHash(), SF_SAVED)) return; - boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), fromConsensus)); + boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), + fromConsensus, theApp->getJobQueue().getLoadEvent(jtDISK))); thread.detach(); boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 64bf9ef4a..7f9556c3e 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -19,6 +19,7 @@ #include "BitcoinUtil.h" #include "SHAMap.h" #include "InstanceCounter.h" +#include "LoadMonitor.h" enum LedgerStateParms { @@ -93,7 +94,7 @@ protected: static void incPendingSaves(); static void decPendingSaves(); - void saveAcceptedLedger(bool fromConsensus); + void saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer); public: Ledger(const RippleAddress& masterID, uint64 startAmount); // used for the starting bootstrap ledger diff --git a/src/cpp/ripple/LoadMonitor.h b/src/cpp/ripple/LoadMonitor.h index 992046c17..6eb259a79 100644 --- a/src/cpp/ripple/LoadMonitor.h +++ b/src/cpp/ripple/LoadMonitor.h @@ -36,7 +36,8 @@ public: class LoadEvent { public: - typedef boost::shared_ptr pointer; + typedef boost::shared_ptr pointer; + typedef std::auto_ptr autoptr; protected: LoadMonitor& mMonitor; diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index cd2c13af4..e67d8eb92 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1002,7 +1002,7 @@ void NetworkOPs::pubLedger(Ledger::ref lpAccepted) if (NetworkOPs::omDISCONNECTED == getOperatingMode()) return; - LoadEvent::pointer event = theApp->getJobQueue().getLoadEvent(jtPUBLEDGER); + LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtPUBLEDGER)); { boost::recursive_mutex::scoped_lock sl(mMonitorLock); diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index f14b4411b..f207cba9b 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -373,7 +373,7 @@ void Peer::processReadBuffer() // std::cerr << "Peer::processReadBuffer: " << mIpPort.first << " " << mIpPort.second << std::endl; - LoadEvent::pointer event = theApp->getJobQueue().getLoadEvent(jtPEER); + LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtPEER)); boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index bed264410..2e94baa2a 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1482,7 +1482,7 @@ Json::Value RPCHandler::doCommand(const std::string& command, Json::Value& param cLog(lsTRACE) << "RPC:" << command; cLog(lsTRACE) << "RPC params:" << params; - LoadEvent::pointer le = theApp->getJobQueue().getLoadEvent(jtRPC); + LoadEvent::autoptr le(theApp->getJobQueue().getLoadEventAP(jtRPC)); mRole = role; diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index cab64a950..f663b2c2a 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -289,7 +289,7 @@ void ValidationCollection::condWrite() void ValidationCollection::doWrite() { - LoadEvent::pointer event = theApp->getJobQueue().getLoadEvent(jtDISK); + LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtDISK)); static boost::format insVal("INSERT INTO LedgerValidations " "(LedgerHash,NodePubKey,Flags,SignTime,Signature) VALUES ('%s','%s','%u','%u',%s);");