Rename util.h Sleep --> MilliSleep

Two reasons for this change:
1. Need to always use boost::thread's sleep, even on Windows, so the
sleeps can be interrupted (prior code used Windows' built-in Sleep).

2. I always forgot what units the old Sleep took.
This commit is contained in:
Gavin Andresen 2013-03-07 14:25:21 -05:00
parent c8c2fbe07f
commit 1b43bf0d3a
8 changed files with 37 additions and 34 deletions

View File

@ -1003,7 +1003,7 @@ void ThreadRPCServer3(void* parg)
If this results in a DOS the user really If this results in a DOS the user really
shouldn't have their RPC port exposed.*/ shouldn't have their RPC port exposed.*/
if (mapArgs["-rpcpassword"].size() < 20) if (mapArgs["-rpcpassword"].size() < 20)
Sleep(250); MilliSleep(250);
conn->stream() << HTTPReply(HTTP_UNAUTHORIZED, "", false) << std::flush; conn->stream() << HTTPReply(HTTP_UNAUTHORIZED, "", false) << std::flush;
break; break;

View File

@ -413,7 +413,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
return fSuccess; return fSuccess;
} }
} }
Sleep(100); MilliSleep(100);
} }
return false; return false;
} }

View File

@ -43,7 +43,7 @@ enum BindFlags {
void ExitTimeout(void* parg) void ExitTimeout(void* parg)
{ {
#ifdef WIN32 #ifdef WIN32
Sleep(5000); MilliSleep(5000);
ExitProcess(0); ExitProcess(0);
#endif #endif
} }
@ -105,7 +105,7 @@ void Shutdown(void* parg)
UnregisterWallet(pwalletMain); UnregisterWallet(pwalletMain);
delete pwalletMain; delete pwalletMain;
NewThread(ExitTimeout, NULL); NewThread(ExitTimeout, NULL);
Sleep(50); MilliSleep(50);
printf("Bitcoin exited\n\n"); printf("Bitcoin exited\n\n");
fExit = true; fExit = true;
#ifndef QT_GUI #ifndef QT_GUI
@ -116,8 +116,8 @@ void Shutdown(void* parg)
else else
{ {
while (!fExit) while (!fExit)
Sleep(500); MilliSleep(500);
Sleep(100); MilliSleep(100);
ExitThread(0); ExitThread(0);
} }
} }
@ -1061,7 +1061,7 @@ bool AppInit2(boost::thread_group& threadGroup)
// Loop until process is exit()ed from shutdown() function, // Loop until process is exit()ed from shutdown() function,
// called from ThreadRPCServer thread when a "stop" command is received. // called from ThreadRPCServer thread when a "stop" command is received.
while (1) while (1)
Sleep(5000); MilliSleep(5000);
#endif #endif
return true; return true;

View File

@ -4520,7 +4520,7 @@ void static BitcoinMiner(CWallet *pwallet)
try { loop { try { loop {
while (vNodes.empty()) while (vNodes.empty())
Sleep(1000); MilliSleep(1000);
// //
// Create new block // Create new block

View File

@ -165,7 +165,7 @@ bool RecvLine(SOCKET hSocket, string& strLine)
continue; continue;
if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS)
{ {
Sleep(10); MilliSleep(10);
continue; continue;
} }
} }
@ -909,7 +909,7 @@ void ThreadSocketHandler2(void* parg)
} }
FD_ZERO(&fdsetSend); FD_ZERO(&fdsetSend);
FD_ZERO(&fdsetError); FD_ZERO(&fdsetError);
Sleep(timeout.tv_usec/1000); MilliSleep(timeout.tv_usec/1000);
} }
@ -1076,7 +1076,7 @@ void ThreadSocketHandler2(void* parg)
pnode->Release(); pnode->Release();
} }
Sleep(10); MilliSleep(10);
} }
} }
@ -1197,7 +1197,7 @@ void ThreadMapPort2(void* parg)
else else
printf("UPnP Port Mapping successful.\n");; printf("UPnP Port Mapping successful.\n");;
} }
Sleep(2000); MilliSleep(2000);
i++; i++;
} }
} else { } else {
@ -1208,7 +1208,7 @@ void ThreadMapPort2(void* parg)
loop { loop {
if (fShutdown || !fUseUPnP) if (fShutdown || !fUseUPnP)
return; return;
Sleep(2000); MilliSleep(2000);
} }
} }
} }
@ -1418,7 +1418,7 @@ void ThreadDumpAddress2(void* parg)
{ {
DumpAddresses(); DumpAddresses();
vnThreadsRunning[THREAD_DUMPADDRESS]--; vnThreadsRunning[THREAD_DUMPADDRESS]--;
Sleep(100000); MilliSleep(100000);
vnThreadsRunning[THREAD_DUMPADDRESS]++; vnThreadsRunning[THREAD_DUMPADDRESS]++;
} }
vnThreadsRunning[THREAD_DUMPADDRESS]--; vnThreadsRunning[THREAD_DUMPADDRESS]--;
@ -1494,12 +1494,12 @@ void ThreadOpenConnections2(void* parg)
OpenNetworkConnection(addr, NULL, strAddr.c_str()); OpenNetworkConnection(addr, NULL, strAddr.c_str());
for (int i = 0; i < 10 && i < nLoop; i++) for (int i = 0; i < 10 && i < nLoop; i++)
{ {
Sleep(500); MilliSleep(500);
if (fShutdown) if (fShutdown)
return; return;
} }
} }
Sleep(500); MilliSleep(500);
} }
} }
@ -1510,7 +1510,7 @@ void ThreadOpenConnections2(void* parg)
ProcessOneShot(); ProcessOneShot();
vnThreadsRunning[THREAD_OPENCONNECTIONS]--; vnThreadsRunning[THREAD_OPENCONNECTIONS]--;
Sleep(500); MilliSleep(500);
vnThreadsRunning[THREAD_OPENCONNECTIONS]++; vnThreadsRunning[THREAD_OPENCONNECTIONS]++;
if (fShutdown) if (fShutdown)
return; return;
@ -1642,12 +1642,12 @@ void ThreadOpenAddedConnections2(void* parg)
CAddress addr; CAddress addr;
CSemaphoreGrant grant(*semOutbound); CSemaphoreGrant grant(*semOutbound);
OpenNetworkConnection(addr, &grant, strAddNode.c_str()); OpenNetworkConnection(addr, &grant, strAddNode.c_str());
Sleep(500); MilliSleep(500);
if (fShutdown) if (fShutdown)
return; return;
} }
vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--;
Sleep(120000); // Retry every 2 minutes MilliSleep(120000); // Retry every 2 minutes
vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++; vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++;
} }
return; return;
@ -1694,14 +1694,14 @@ void ThreadOpenAddedConnections2(void* parg)
{ {
CSemaphoreGrant grant(*semOutbound); CSemaphoreGrant grant(*semOutbound);
OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant);
Sleep(500); MilliSleep(500);
if (fShutdown) if (fShutdown)
return; return;
} }
if (fShutdown) if (fShutdown)
return; return;
vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--; vnThreadsRunning[THREAD_ADDEDCONNECTIONS]--;
Sleep(120000); // Retry every 2 minutes MilliSleep(120000); // Retry every 2 minutes
vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++; vnThreadsRunning[THREAD_ADDEDCONNECTIONS]++;
if (fShutdown) if (fShutdown)
return; return;
@ -1821,7 +1821,7 @@ void ThreadMessageHandler2(void* parg)
// Reduce vnThreadsRunning so StopNode has permission to exit while // Reduce vnThreadsRunning so StopNode has permission to exit while
// we're sleeping, but we must always check fShutdown after doing this. // we're sleeping, but we must always check fShutdown after doing this.
vnThreadsRunning[THREAD_MESSAGEHANDLER]--; vnThreadsRunning[THREAD_MESSAGEHANDLER]--;
Sleep(100); MilliSleep(100);
if (fRequestShutdown) if (fRequestShutdown)
StartShutdown(); StartShutdown();
vnThreadsRunning[THREAD_MESSAGEHANDLER]++; vnThreadsRunning[THREAD_MESSAGEHANDLER]++;
@ -2068,7 +2068,7 @@ bool StopNode()
break; break;
if (GetTime() - nStart > 20) if (GetTime() - nStart > 20)
break; break;
Sleep(20); MilliSleep(20);
} while(true); } while(true);
if (vnThreadsRunning[THREAD_SOCKETHANDLER] > 0) printf("ThreadSocketHandler still running\n"); if (vnThreadsRunning[THREAD_SOCKETHANDLER] > 0) printf("ThreadSocketHandler still running\n");
if (vnThreadsRunning[THREAD_OPENCONNECTIONS] > 0) printf("ThreadOpenConnections still running\n"); if (vnThreadsRunning[THREAD_OPENCONNECTIONS] > 0) printf("ThreadOpenConnections still running\n");
@ -2082,8 +2082,8 @@ bool StopNode()
if (vnThreadsRunning[THREAD_ADDEDCONNECTIONS] > 0) printf("ThreadOpenAddedConnections still running\n"); if (vnThreadsRunning[THREAD_ADDEDCONNECTIONS] > 0) printf("ThreadOpenAddedConnections still running\n");
if (vnThreadsRunning[THREAD_DUMPADDRESS] > 0) printf("ThreadDumpAddresses still running\n"); if (vnThreadsRunning[THREAD_DUMPADDRESS] > 0) printf("ThreadDumpAddresses still running\n");
while (vnThreadsRunning[THREAD_MESSAGEHANDLER] > 0 || vnThreadsRunning[THREAD_RPCHANDLER] > 0) while (vnThreadsRunning[THREAD_MESSAGEHANDLER] > 0 || vnThreadsRunning[THREAD_RPCHANDLER] > 0)
Sleep(20); MilliSleep(20);
Sleep(50); MilliSleep(50);
DumpAddresses(); DumpAddresses();
return true; return true;

View File

@ -1289,7 +1289,7 @@ void ThreadCleanWalletPassphrase(void* parg)
break; break;
LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime);
Sleep(nToSleep); MilliSleep(nToSleep);
ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
} while(1); } while(1);

View File

@ -100,14 +100,17 @@ T* alignup(T* p)
#endif #endif
#else #else
#define MAX_PATH 1024 #define MAX_PATH 1024
inline void Sleep(int64 n)
{
/*Boost has a year 2038 problem— if the request sleep time is past epoch+2^31 seconds the sleep returns instantly.
So we clamp our sleeps here to 10 years and hope that boost is fixed by 2028.*/
boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n>315576000000LL?315576000000LL:n));
}
#endif #endif
inline void MilliSleep(int64 n)
{
#if BOOST_VERSION >= 105000
boost::this_thread::sleep_for(boost::chrono::milliseconds(n));
#else
boost::this_thread::sleep(boost::posix_time::milliseconds(n));
#endif
}
/* This GNU C extension enables the compiler to check the format string against the parameters provided. /* This GNU C extension enables the compiler to check the format string against the parameters provided.
* X is the number of the "format string" parameter, and Y is the number of the first variadic parameter. * X is the number of the "format string" parameter, and Y is the number of the first variadic parameter.
* Parameters count from 1. * Parameters count from 1.

View File

@ -500,7 +500,7 @@ void ThreadFlushWalletDB(void* parg)
int64 nLastWalletUpdate = GetTime(); int64 nLastWalletUpdate = GetTime();
while (!fShutdown) while (!fShutdown)
{ {
Sleep(500); MilliSleep(500);
if (nLastSeen != nWalletDBUpdated) if (nLastSeen != nWalletDBUpdated)
{ {
@ -579,7 +579,7 @@ bool BackupWallet(const CWallet& wallet, const string& strDest)
} }
} }
} }
Sleep(100); MilliSleep(100);
} }
return false; return false;
} }