aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2013-04-02 10:00:31 -0700
committerGavin Andresen <gavinandresen@gmail.com>2013-04-02 10:00:31 -0700
commitd8aae1ce1deea764f9ab61bbd210a3963f650d96 (patch)
tree0a7fa2798875db0c2914186696dcae903051f429 /src
parent06db61f09e4201a17ef169754ac374a2b7a37316 (diff)
parent3427517d507a938074a50fa8ea6dfe3d13bef357 (diff)
downloadbitcoin-d8aae1ce1deea764f9ab61bbd210a3963f650d96.tar.xz
Merge pull request #2420 from sipa/globclean
Global cleanups
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp26
-rw-r--r--src/net.cpp17
2 files changed, 41 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp
index b29091b4fe..60593c0d5f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4764,3 +4764,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;
diff --git a/src/net.cpp b/src/net.cpp
index 6f3c8a51ae..669f44b639 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -775,12 +775,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
{
//
@@ -2085,6 +2085,7 @@ bool StopNode()
Sleep(20);
Sleep(50);
DumpAddresses();
+
return true;
}
@@ -2105,6 +2106,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();