diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 4c6cd9334..fcee58812 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -371,6 +371,7 @@ void Application::run() boost::thread(boost::bind(runIO, boost::ref(mIOService))).detach(); } + theApp->getLoadManager().arm(); mIOService.run(); // This blocks if (mWSPublicDoor) diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 3f5fb662c..942ef7adc 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -22,7 +22,7 @@ int upTime() LoadManager::LoadManager(int creditRate, int creditLimit, int debitWarn, int debitLimit) : mCreditRate(creditRate), mCreditLimit(creditLimit), mDebitWarn(debitWarn), mDebitLimit(debitLimit), - mShutdown(false), mUptime(0), mDeadLock(0), mCosts(LT_MAX) + mShutdown(false), mArmed(false), mUptime(0), mDeadLock(0), mCosts(LT_MAX) { addLoadCost(LoadCost(LT_InvalidRequest, -10, LC_CPU | LC_Network)); addLoadCost(LoadCost(LT_RequestNoReply, -1, LC_CPU | LC_Disk)); @@ -353,14 +353,14 @@ void LoadManager::threadEntry() ++mUptime; int dlTime = mUptime - mDeadLock; - if (dlTime >= 10) + if (mArmed && (dlTime >= 10)) { if ((dlTime % 10) == 0) { boost::thread(BIND_TYPE(&LogDeadLock, dlTime)).detach(); } - assert (dlTime < 180); + assert (dlTime < 500); } } diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 4257b21af..70944f8f2 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -101,6 +101,7 @@ protected: int mDebitLimit; // when a source drops below this, we cut it off (should be negative) bool mShutdown; + bool mArmed; int mSpace1[4]; // We want mUptime to have its own cache line int mUptime; @@ -144,6 +145,7 @@ public: int getCost(LoadType t) { return mCosts[static_cast(t)].mCost; } int getUptime(); void noDeadLock(); + void arm() { mArmed = true; } }; class LoadFeeTrack