From d6875975ab9a1b407bd5a54bfdb1e3a1b88c225a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Sep 2015 21:37:43 -0700 Subject: [PATCH] Fix OpenLedger::empty: * Fix logic of OpenLedger::empty * Add regression test * Remove some dead code --- src/ripple/app/ledger/impl/LedgerConsensusImp.cpp | 8 ++------ src/ripple/app/ledger/impl/OpenLedger.cpp | 2 +- src/ripple/ledger/tests/View_test.cpp | 8 ++++++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp b/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp index 5c71b203e..78182e01b 100644 --- a/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp +++ b/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp @@ -1132,12 +1132,6 @@ void LedgerConsensusImp::accept (std::shared_ptr set) // See if we can accept a ledger as fully-validated ledgerMaster_.consensusBuilt (newLCL); - // Build new open ledger - auto newOL = std::make_shared( - open_ledger, *newLCL, app_.timeKeeper().closeTime()); - OpenView accum(&*newOL); - assert(accum.open()); - // Apply disputed transactions that didn't get in // // The first crack of transactions to get into the new @@ -1177,6 +1171,8 @@ void LedgerConsensusImp::accept (std::shared_ptr set) } { + // Build new open ledger + auto lock = beast::make_lock( app_.getMasterMutex(), std::defer_lock); LedgerMaster::ScopedLockType sl ( diff --git a/src/ripple/app/ledger/impl/OpenLedger.cpp b/src/ripple/app/ledger/impl/OpenLedger.cpp index e1f37ff5b..1294bd104 100644 --- a/src/ripple/app/ledger/impl/OpenLedger.cpp +++ b/src/ripple/app/ledger/impl/OpenLedger.cpp @@ -41,7 +41,7 @@ OpenLedger::empty() const { std::lock_guard< std::mutex> lock(modify_mutex_); - return current_->txCount() != 0; + return current_->txCount() == 0; } std::shared_ptr diff --git a/src/ripple/ledger/tests/View_test.cpp b/src/ripple/ledger/tests/View_test.cpp index 5d273cc4d..588ffaab4 100644 --- a/src/ripple/ledger/tests/View_test.cpp +++ b/src/ripple/ledger/tests/View_test.cpp @@ -551,6 +551,14 @@ class View_test } expect(! v1.exists(k(1))); } + + // Make sure OpenLedger::empty works + { + Env env(*this); + expect(env.openLedger.empty()); + env.fund(XRP(10000), Account("test")); + expect(!env.openLedger.empty()); + } } void run()