Clean up global datastructures at shutdown.
This should make detecting leaks much easier.
This commit is contained in:
parent
dfd71bb450
commit
3427517d50
2 changed files with 41 additions and 2 deletions
26
src/main.cpp
26
src/main.cpp
|
@ -4750,3 +4750,29 @@ uint64 CTxOutCompressor::DecompressAmount(uint64 x)
|
|||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
class CMainCleanup
|
||||
{
|
||||
public:
|
||||
CMainCleanup() {}
|
||||
~CMainCleanup() {
|
||||
// block headers
|
||||
std::map<uint256, CBlockIndex*>::iterator it1 = mapBlockIndex.begin();
|
||||
for (; it1 != mapBlockIndex.end(); it1++)
|
||||
delete (*it1).second;
|
||||
mapBlockIndex.clear();
|
||||
|
||||
// orphan blocks
|
||||
std::map<uint256, CBlock*>::iterator it2 = mapOrphanBlocks.begin();
|
||||
for (; it2 != mapOrphanBlocks.end(); it2++)
|
||||
delete (*it2).second;
|
||||
mapOrphanBlocks.clear();
|
||||
|
||||
// orphan transactions
|
||||
std::map<uint256, CDataStream*>::iterator it3 = mapOrphanTransactions.begin();
|
||||
for (; it3 != mapOrphanTransactions.end(); it3++)
|
||||
delete (*it3).second;
|
||||
mapOrphanTransactions.clear();
|
||||
}
|
||||
} instance_of_cmaincleanup;
|
||||
|
|
17
src/net.cpp
17
src/net.cpp
|
@ -660,12 +660,12 @@ void ThreadSocketHandler(void* parg)
|
|||
printf("ThreadSocketHandler exited\n");
|
||||
}
|
||||
|
||||
static list<CNode*> vNodesDisconnected;
|
||||
|
||||
void ThreadSocketHandler2(void* parg)
|
||||
{
|
||||
printf("ThreadSocketHandler started\n");
|
||||
list<CNode*> vNodesDisconnected;
|
||||
unsigned int nPrevNodeCount = 0;
|
||||
|
||||
loop
|
||||
{
|
||||
//
|
||||
|
@ -1992,6 +1992,7 @@ bool StopNode()
|
|||
Sleep(20);
|
||||
Sleep(50);
|
||||
DumpAddresses();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2012,6 +2013,18 @@ public:
|
|||
if (closesocket(hListenSocket) == SOCKET_ERROR)
|
||||
printf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError());
|
||||
|
||||
// clean up some globals (to help leak detection)
|
||||
BOOST_FOREACH(CNode *pnode, vNodes)
|
||||
delete pnode;
|
||||
BOOST_FOREACH(CNode *pnode, vNodesDisconnected)
|
||||
delete pnode;
|
||||
vNodes.clear();
|
||||
vNodesDisconnected.clear();
|
||||
delete semOutbound;
|
||||
semOutbound = NULL;
|
||||
delete pnodeLocalHost;
|
||||
pnodeLocalHost = NULL;
|
||||
|
||||
#ifdef WIN32
|
||||
// Shutdown Windows Sockets
|
||||
WSACleanup();
|
||||
|
|
Loading…
Reference in a new issue