Fix application pointer singleton lifetime

This commit is contained in:
Vinnie Falco
2014-02-03 22:35:42 -08:00
parent 83442825e5
commit 7fb614f7af
3 changed files with 67 additions and 62 deletions

View File

@@ -22,19 +22,7 @@
<ClCompile Include="..\..\build\proto\ripple.pb.cc" />
<ClCompile Include="..\..\src\ripple\beast\ripple_beast.cpp" />
<ClCompile Include="..\..\src\ripple\beast\ripple_beastc.c" />
<ClCompile Include="..\..\src\ripple\common\impl\counted_bind.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\KeyCache.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\TaggedCache.cpp">
<ClCompile Include="..\..\src\ripple\common\functional\impl\counted_bind.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
@@ -1430,12 +1418,24 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple_basics\containers\KeyCache.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple_basics\containers\RangeSet.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple_basics\containers\TaggedCache.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple_basics\log\Log.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@@ -2207,10 +2207,7 @@
<ClInclude Include="..\..\src\ripple\algorithm\api\CycledSet.h" />
<ClInclude Include="..\..\src\ripple\algorithm\api\DecayingSample.h" />
<ClInclude Include="..\..\src\ripple\algorithm\api\DiscreteClock.h" />
<ClInclude Include="..\..\src\ripple\common\counted_bind.h" />
<ClInclude Include="..\..\src\ripple\common\KeyCache.h" />
<ClInclude Include="..\..\src\ripple\common\seconds_clock.h" />
<ClInclude Include="..\..\src\ripple\common\TaggedCache.h" />
<ClInclude Include="..\..\src\ripple\common\functional\counted_bind.h" />
<ClInclude Include="..\..\src\ripple\http\api\Handler.h" />
<ClInclude Include="..\..\src\ripple\http\api\Server.h" />
<ClInclude Include="..\..\src\ripple\http\api\Port.h" />
@@ -2458,7 +2455,6 @@
<ClInclude Include="..\..\src\ripple_app\ledger\OrderBookIterator.h" />
<ClInclude Include="..\..\src\ripple_app\ledger\SerializedValidation.h" />
<ClInclude Include="..\..\src\ripple_app\main\CollectorManager.h" />
<ClInclude Include="..\..\src\ripple_app\main\FullBelowCache.h" />
<ClInclude Include="..\..\src\ripple_app\main\IoServicePool.h" />
<ClInclude Include="..\..\src\ripple_app\main\NodeStoreScheduler.h" />
<ClInclude Include="..\..\src\ripple_app\main\ParameterTable.h" />
@@ -2468,7 +2464,6 @@
<ClInclude Include="..\..\src\ripple_app\main\LocalCredentials.h" />
<ClInclude Include="..\..\src\ripple_app\main\RippleMain.h" />
<ClInclude Include="..\..\src\ripple_app\main\RPCHTTPServer.h" />
<ClInclude Include="..\..\src\ripple_app\main\Tuning.h" />
<ClInclude Include="..\..\src\ripple_app\misc\NetworkOPs.h" />
<ClInclude Include="..\..\src\ripple_app\misc\PowResult.h" />
<ClInclude Include="..\..\src\ripple_app\misc\AccountItem.h" />
@@ -2533,7 +2528,10 @@
<ClInclude Include="..\..\src\ripple_app\websocket\WSConnection.h" />
<ClInclude Include="..\..\src\ripple_app\websocket\WSDoor.h" />
<ClInclude Include="..\..\src\ripple_app\websocket\WSServerHandler.h" />
<ClInclude Include="..\..\src\ripple_basics\containers\KeyCache.h" />
<ClInclude Include="..\..\src\ripple_basics\containers\RangeSet.h" />
<ClInclude Include="..\..\src\ripple_basics\containers\SyncUnorderedMap.h" />
<ClInclude Include="..\..\src\ripple_basics\containers\TaggedCache.h" />
<ClInclude Include="..\..\src\ripple_basics\log\Log.h" />
<ClInclude Include="..\..\src\ripple_basics\log\LogFile.h" />
<ClInclude Include="..\..\src\ripple_basics\log\LoggedTimings.h" />

View File

@@ -292,8 +292,11 @@
<Filter Include="[1] Ripple\common">
<UniqueIdentifier>{b99052d6-a903-4dfd-9c68-ff767a7d8f63}</UniqueIdentifier>
</Filter>
<Filter Include="[1] Ripple\common\impl">
<UniqueIdentifier>{c9eed7bc-87ac-4a4f-ab79-91de2319d22a}</UniqueIdentifier>
<Filter Include="[1] Ripple\common\functional">
<UniqueIdentifier>{e2a53cb6-0594-4646-a36f-68d598972da4}</UniqueIdentifier>
</Filter>
<Filter Include="[1] Ripple\common\functional\impl">
<UniqueIdentifier>{24383350-1f23-42f8-8b58-399fee670b17}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@@ -1440,14 +1443,14 @@
<ClCompile Include="..\..\src\ripple_app\ledger\DirectoryEntryIterator.cpp">
<Filter>[2] Old Ripple\ripple_app\ledger</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\counted_bind.cpp">
<Filter>[1] Ripple\common\impl</Filter>
<ClCompile Include="..\..\src\ripple\common\functional\impl\counted_bind.cpp">
<Filter>[1] Ripple\common\functional\impl</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\KeyCache.cpp">
<Filter>[1] Ripple\common\impl</Filter>
<ClCompile Include="..\..\src\ripple_basics\containers\KeyCache.cpp">
<Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\TaggedCache.cpp">
<Filter>[1] Ripple\common\impl</Filter>
<ClCompile Include="..\..\src\ripple_basics\containers\TaggedCache.cpp">
<Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -2940,23 +2943,17 @@
<ClInclude Include="..\..\src\ripple_app\paths\PathRequests.h">
<Filter>[2] Old Ripple\ripple_app\paths</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\common\counted_bind.h">
<Filter>[1] Ripple\common</Filter>
<ClInclude Include="..\..\src\ripple\common\functional\counted_bind.h">
<Filter>[1] Ripple\common\functional</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\common\KeyCache.h">
<Filter>[1] Ripple\common</Filter>
<ClInclude Include="..\..\src\ripple_basics\containers\KeyCache.h">
<Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\common\TaggedCache.h">
<Filter>[1] Ripple\common</Filter>
<ClInclude Include="..\..\src\ripple_basics\containers\SyncUnorderedMap.h">
<Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\common\seconds_clock.h">
<Filter>[1] Ripple\common</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple_app\main\FullBelowCache.h">
<Filter>[2] Old Ripple\ripple_app\main</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple_app\main\Tuning.h">
<Filter>[2] Old Ripple\ripple_app\main</Filter>
<ClInclude Include="..\..\src\ripple_basics\containers\TaggedCache.h">
<Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>

View File

@@ -56,9 +56,38 @@ template <> char const* LogPartition::getPartitionName <TaggedCacheLog> () { ret
//
//------------------------------------------------------------------------------
// This hack lets the s_instance variable remain set during
// the call to ~Application
class ApplicationImpBase : public Application
{
public:
ApplicationImpBase ()
{
assert (s_instance == nullptr);
s_instance = this;
}
~ApplicationImpBase ()
{
s_instance = nullptr;
}
static Application* s_instance;
static Application& getInstance ()
{
bassert (s_instance != nullptr);
return *s_instance;
}
};
Application* ApplicationImpBase::s_instance;
//------------------------------------------------------------------------------
// VFALCO TODO Move the function definitions into the class declaration
class ApplicationImp
: public Application
: public ApplicationImpBase
, public RootStoppable
, public DeadlineTimer::Listener
, public LeakChecked <ApplicationImp>
@@ -127,14 +156,6 @@ public:
io_latency_probe <std::chrono::steady_clock> m_probe;
static ApplicationImp* s_instance;
static Application& getInstance ()
{
bassert (s_instance != nullptr);
return *s_instance;
}
//--------------------------------------------------------------------------
class sample_io_service_latency
@@ -298,19 +319,12 @@ public:
// VFALCO HACK
m_nodeStoreScheduler.setJobQueue (*m_jobQueue);
bassert (s_instance == nullptr);
s_instance = this;
add (m_ledgerMaster->getPropertySource ());
// VFALCO TODO remove these once the call is thread safe.
HashMaps::getInstance ().initializeNonce <size_t> ();
}
~ApplicationImp ()
{
}
//--------------------------------------------------------------------------
CollectorManager& getCollectorManager ()
@@ -1366,10 +1380,6 @@ void ApplicationImp::onAnnounceAddress ()
//------------------------------------------------------------------------------
ApplicationImp* ApplicationImp::s_instance;
//------------------------------------------------------------------------------
Application::Application ()
: PropertyStream::Source ("app")
{
@@ -1382,7 +1392,7 @@ std::unique_ptr <Application> make_Application ()
Application& getApp ()
{
return ApplicationImp::getInstance ();
return ApplicationImpBase::getInstance ();
}
// class LoandObject (5removed, use git history to recover)