Move DNS Seed lookup to a new thread.

This commit is contained in:
Matt Corallo 2011-11-21 12:25:00 -05:00
parent 50aa850fc8
commit 2bc6cecebb
3 changed files with 38 additions and 7 deletions

View File

@ -476,11 +476,6 @@ bool AppInit2(int argc, char* argv[])
} }
} }
if (GetBoolArg("-nodnsseed"))
printf("DNS seeding disabled\n");
else
DNSAddressSeed();
if (mapArgs.count("-paytxfee")) if (mapArgs.count("-paytxfee"))
{ {
if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))

View File

@ -32,6 +32,7 @@ void ThreadOpenConnections2(void* parg);
#ifdef USE_UPNP #ifdef USE_UPNP
void ThreadMapPort2(void* parg); void ThreadMapPort2(void* parg);
#endif #endif
void ThreadDNSAddressSeed2(void* parg);
bool OpenNetworkConnection(const CAddress& addrConnect); bool OpenNetworkConnection(const CAddress& addrConnect);
@ -1213,8 +1214,28 @@ static const char *strDNSSeed[] = {
"dnsseed.bluematt.me", "dnsseed.bluematt.me",
}; };
void DNSAddressSeed() void ThreadDNSAddressSeed(void* parg)
{ {
IMPLEMENT_RANDOMIZE_STACK(ThreadDNSAddressSeed(parg));
try
{
vnThreadsRunning[6]++;
ThreadDNSAddressSeed2(parg);
vnThreadsRunning[6]--;
}
catch (std::exception& e) {
vnThreadsRunning[6]--;
PrintException(&e, "ThreadDNSAddressSeed()");
} catch (...) {
vnThreadsRunning[6]--;
throw; // support pthread_cancel()
}
printf("ThreadDNSAddressSeed exiting\n");
}
void ThreadDNSAddressSeed2(void* parg)
{
printf("ThreadDNSAddressSeed started\n");
int found = 0; int found = 0;
if (!fTestNet) if (!fTestNet)
@ -1247,6 +1268,15 @@ void DNSAddressSeed()
unsigned int pnSeed[] = unsigned int pnSeed[] =
{ {
0x6884ac63, 0x3ffecead, 0x2919b953, 0x0942fe50, 0x7a1d922e, 0xcdd6734a, 0x953a5bb6, 0x2c46922e, 0x6884ac63, 0x3ffecead, 0x2919b953, 0x0942fe50, 0x7a1d922e, 0xcdd6734a, 0x953a5bb6, 0x2c46922e,
@ -1757,6 +1787,12 @@ void StartNode(void* parg)
// Start threads // Start threads
// //
if (GetBoolArg("-nodnsseed"))
printf("DNS seeding disabled\n");
else
if (!CreateThread(ThreadDNSAddressSeed, NULL))
printf("Error: CreateThread(ThreadDNSAddressSeed) failed\n");
// Map ports with UPnP // Map ports with UPnP
if (fHaveUPnP) if (fHaveUPnP)
MapPort(fUseUPnP); MapPort(fUseUPnP);
@ -1803,6 +1839,7 @@ bool StopNode()
if (vnThreadsRunning[3] > 0) printf("ThreadBitcoinMiner still running\n"); if (vnThreadsRunning[3] > 0) printf("ThreadBitcoinMiner still running\n");
if (vnThreadsRunning[4] > 0) printf("ThreadRPCServer still running\n"); if (vnThreadsRunning[4] > 0) printf("ThreadRPCServer still running\n");
if (fHaveUPnP && vnThreadsRunning[5] > 0) printf("ThreadMapPort still running\n"); if (fHaveUPnP && vnThreadsRunning[5] > 0) printf("ThreadMapPort still running\n");
if (vnThreadsRunning[6] > 0) printf("ThreadDNSAddressSeed still running\n");
while (vnThreadsRunning[2] > 0 || vnThreadsRunning[4] > 0) while (vnThreadsRunning[2] > 0 || vnThreadsRunning[4] > 0)
Sleep(20); Sleep(20);
Sleep(50); Sleep(50);

View File

@ -40,7 +40,6 @@ CNode* ConnectNode(CAddress addrConnect, int64 nTimeout=0);
void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1); void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1);
bool AnySubscribed(unsigned int nChannel); bool AnySubscribed(unsigned int nChannel);
void MapPort(bool fMapPort); void MapPort(bool fMapPort);
void DNSAddressSeed();
bool BindListenPort(std::string& strError=REF(std::string())); bool BindListenPort(std::string& strError=REF(std::string()));
void StartNode(void* parg); void StartNode(void* parg);
bool StopNode(); bool StopNode();