Get a lock acquire out of a critical fast path.

This commit is contained in:
JoelKatz
2013-07-02 19:22:28 -07:00
parent c487717108
commit 582c2758b0
2 changed files with 20 additions and 16 deletions

View File

@@ -168,15 +168,19 @@ void InboundLedger::onTimer (bool progress)
void InboundLedger::awaitData ()
{
boost::recursive_mutex::scoped_lock sl (mLock);
++mWaitCount;
}
void InboundLedger::noAwaitData ()
{
boost::recursive_mutex::scoped_lock sl (mLock);
if (mWaitCount > 0 ) --mWaitCount;
{ // subtract one if mWaitCount is greater than zero
do
{
int j = mWaitCount.get();
if (j <= 0)
return;
if (mWaitCount.compareAndSetBool(j - 1, j))
return;
} while (1);
}
void InboundLedger::addPeers ()
@@ -285,7 +289,7 @@ void InboundLedger::trigger (Peer::ref peer)
return;
}
if ((mWaitCount > 0) && peer)
if ((mWaitCount.get() > 0) && peer)
{
WriteLog (lsTRACE, InboundLedger) << "Skipping peer";
return;

View File

@@ -102,16 +102,16 @@ private:
boost::weak_ptr <PeerSet> pmDowncast ();
private:
Ledger::pointer mLedger;
bool mHaveBase;
bool mHaveState;
bool mHaveTransactions;
bool mAborted;
bool mSignaled;
bool mAccept;
bool mByHash;
int mWaitCount;
uint32 mSeq;
Ledger::pointer mLedger;
bool mHaveBase;
bool mHaveState;
bool mHaveTransactions;
bool mAborted;
bool mSignaled;
bool mAccept;
bool mByHash;
beast::Atomic<int> mWaitCount;
uint32 mSeq;
std::set <SHAMapNode> mRecentTXNodes;
std::set <SHAMapNode> mRecentASNodes;