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="..\..\build\proto\ripple.pb.cc" />
<ClCompile Include="..\..\src\ripple\beast\ripple_beast.cpp" /> <ClCompile Include="..\..\src\ripple\beast\ripple_beast.cpp" />
<ClCompile Include="..\..\src\ripple\beast\ripple_beastc.c" /> <ClCompile Include="..\..\src\ripple\beast\ripple_beastc.c" />
<ClCompile Include="..\..\src\ripple\common\impl\counted_bind.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>
<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">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">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)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile> </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"> <ClCompile Include="..\..\src\ripple_basics\containers\RangeSet.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile> </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"> <ClCompile Include="..\..\src\ripple_basics\log\Log.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|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\CycledSet.h" />
<ClInclude Include="..\..\src\ripple\algorithm\api\DecayingSample.h" /> <ClInclude Include="..\..\src\ripple\algorithm\api\DecayingSample.h" />
<ClInclude Include="..\..\src\ripple\algorithm\api\DiscreteClock.h" /> <ClInclude Include="..\..\src\ripple\algorithm\api\DiscreteClock.h" />
<ClInclude Include="..\..\src\ripple\common\counted_bind.h" /> <ClInclude Include="..\..\src\ripple\common\functional\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\http\api\Handler.h" /> <ClInclude Include="..\..\src\ripple\http\api\Handler.h" />
<ClInclude Include="..\..\src\ripple\http\api\Server.h" /> <ClInclude Include="..\..\src\ripple\http\api\Server.h" />
<ClInclude Include="..\..\src\ripple\http\api\Port.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\OrderBookIterator.h" />
<ClInclude Include="..\..\src\ripple_app\ledger\SerializedValidation.h" /> <ClInclude Include="..\..\src\ripple_app\ledger\SerializedValidation.h" />
<ClInclude Include="..\..\src\ripple_app\main\CollectorManager.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\IoServicePool.h" />
<ClInclude Include="..\..\src\ripple_app\main\NodeStoreScheduler.h" /> <ClInclude Include="..\..\src\ripple_app\main\NodeStoreScheduler.h" />
<ClInclude Include="..\..\src\ripple_app\main\ParameterTable.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\LocalCredentials.h" />
<ClInclude Include="..\..\src\ripple_app\main\RippleMain.h" /> <ClInclude Include="..\..\src\ripple_app\main\RippleMain.h" />
<ClInclude Include="..\..\src\ripple_app\main\RPCHTTPServer.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\NetworkOPs.h" />
<ClInclude Include="..\..\src\ripple_app\misc\PowResult.h" /> <ClInclude Include="..\..\src\ripple_app\misc\PowResult.h" />
<ClInclude Include="..\..\src\ripple_app\misc\AccountItem.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\WSConnection.h" />
<ClInclude Include="..\..\src\ripple_app\websocket\WSDoor.h" /> <ClInclude Include="..\..\src\ripple_app\websocket\WSDoor.h" />
<ClInclude Include="..\..\src\ripple_app\websocket\WSServerHandler.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\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\Log.h" />
<ClInclude Include="..\..\src\ripple_basics\log\LogFile.h" /> <ClInclude Include="..\..\src\ripple_basics\log\LogFile.h" />
<ClInclude Include="..\..\src\ripple_basics\log\LoggedTimings.h" /> <ClInclude Include="..\..\src\ripple_basics\log\LoggedTimings.h" />

View File

@@ -292,8 +292,11 @@
<Filter Include="[1] Ripple\common"> <Filter Include="[1] Ripple\common">
<UniqueIdentifier>{b99052d6-a903-4dfd-9c68-ff767a7d8f63}</UniqueIdentifier> <UniqueIdentifier>{b99052d6-a903-4dfd-9c68-ff767a7d8f63}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="[1] Ripple\common\impl"> <Filter Include="[1] Ripple\common\functional">
<UniqueIdentifier>{c9eed7bc-87ac-4a4f-ab79-91de2319d22a}</UniqueIdentifier> <UniqueIdentifier>{e2a53cb6-0594-4646-a36f-68d598972da4}</UniqueIdentifier>
</Filter>
<Filter Include="[1] Ripple\common\functional\impl">
<UniqueIdentifier>{24383350-1f23-42f8-8b58-399fee670b17}</UniqueIdentifier>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -1440,14 +1443,14 @@
<ClCompile Include="..\..\src\ripple_app\ledger\DirectoryEntryIterator.cpp"> <ClCompile Include="..\..\src\ripple_app\ledger\DirectoryEntryIterator.cpp">
<Filter>[2] Old Ripple\ripple_app\ledger</Filter> <Filter>[2] Old Ripple\ripple_app\ledger</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\counted_bind.cpp"> <ClCompile Include="..\..\src\ripple\common\functional\impl\counted_bind.cpp">
<Filter>[1] Ripple\common\impl</Filter> <Filter>[1] Ripple\common\functional\impl</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\KeyCache.cpp"> <ClCompile Include="..\..\src\ripple_basics\containers\KeyCache.cpp">
<Filter>[1] Ripple\common\impl</Filter> <Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\common\impl\TaggedCache.cpp"> <ClCompile Include="..\..\src\ripple_basics\containers\TaggedCache.cpp">
<Filter>[1] Ripple\common\impl</Filter> <Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -2940,23 +2943,17 @@
<ClInclude Include="..\..\src\ripple_app\paths\PathRequests.h"> <ClInclude Include="..\..\src\ripple_app\paths\PathRequests.h">
<Filter>[2] Old Ripple\ripple_app\paths</Filter> <Filter>[2] Old Ripple\ripple_app\paths</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\common\counted_bind.h"> <ClInclude Include="..\..\src\ripple\common\functional\counted_bind.h">
<Filter>[1] Ripple\common</Filter> <Filter>[1] Ripple\common\functional</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\common\KeyCache.h"> <ClInclude Include="..\..\src\ripple_basics\containers\KeyCache.h">
<Filter>[1] Ripple\common</Filter> <Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\common\TaggedCache.h"> <ClInclude Include="..\..\src\ripple_basics\containers\SyncUnorderedMap.h">
<Filter>[1] Ripple\common</Filter> <Filter>[2] Old Ripple\ripple_basics\containers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\common\seconds_clock.h"> <ClInclude Include="..\..\src\ripple_basics\containers\TaggedCache.h">
<Filter>[1] Ripple\common</Filter> <Filter>[2] Old Ripple\ripple_basics\containers</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> </ClInclude>
</ItemGroup> </ItemGroup>
<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 // VFALCO TODO Move the function definitions into the class declaration
class ApplicationImp class ApplicationImp
: public Application : public ApplicationImpBase
, public RootStoppable , public RootStoppable
, public DeadlineTimer::Listener , public DeadlineTimer::Listener
, public LeakChecked <ApplicationImp> , public LeakChecked <ApplicationImp>
@@ -127,14 +156,6 @@ public:
io_latency_probe <std::chrono::steady_clock> m_probe; 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 class sample_io_service_latency
@@ -298,19 +319,12 @@ public:
// VFALCO HACK // VFALCO HACK
m_nodeStoreScheduler.setJobQueue (*m_jobQueue); m_nodeStoreScheduler.setJobQueue (*m_jobQueue);
bassert (s_instance == nullptr);
s_instance = this;
add (m_ledgerMaster->getPropertySource ()); add (m_ledgerMaster->getPropertySource ());
// VFALCO TODO remove these once the call is thread safe. // VFALCO TODO remove these once the call is thread safe.
HashMaps::getInstance ().initializeNonce <size_t> (); HashMaps::getInstance ().initializeNonce <size_t> ();
} }
~ApplicationImp ()
{
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
CollectorManager& getCollectorManager () CollectorManager& getCollectorManager ()
@@ -1366,10 +1380,6 @@ void ApplicationImp::onAnnounceAddress ()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
ApplicationImp* ApplicationImp::s_instance;
//------------------------------------------------------------------------------
Application::Application () Application::Application ()
: PropertyStream::Source ("app") : PropertyStream::Source ("app")
{ {
@@ -1382,7 +1392,7 @@ std::unique_ptr <Application> make_Application ()
Application& getApp () Application& getApp ()
{ {
return ApplicationImp::getInstance (); return ApplicationImpBase::getInstance ();
} }
// class LoandObject (5removed, use git history to recover) // class LoandObject (5removed, use git history to recover)