OutputDebugStringF fix for Mac FileVault problem, take 3

(cannot use a CRITICAL_BLOCK because of undefined order calling static destructors;
instead, keep debug.log open, and tell people to use copytruncate when doing
log rotation)


git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@183 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
gavinandresen 2010-11-18 00:11:33 +00:00
parent 2f7a9997c8
commit c4679ad0f1
1 changed files with 20 additions and 27 deletions

View File

@ -145,8 +145,6 @@ int GetRandInt(int nMax)
inline int OutputDebugStringF(const char* pszFormat, ...) inline int OutputDebugStringF(const char* pszFormat, ...)
{ {
static CCriticalSection cs_OutputDebugStringF;
int ret = 0; int ret = 0;
if (fPrintToConsole) if (fPrintToConsole)
{ {
@ -158,38 +156,33 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
} }
else else
{ {
CRITICAL_BLOCK(cs_OutputDebugStringF) // print to debug.log
{ static FILE* fileout = NULL;
// print to debug.log
static FILE* fileout = NULL;
static int64 nOpenTime = 0;
if (GetTime()-nOpenTime > 10 * 60) if (!fileout)
{ {
if (fileout) char pszFile[MAX_PATH+100];
fclose(fileout); GetDataDir(pszFile);
char pszFile[MAX_PATH+100]; strlcat(pszFile, "/debug.log", sizeof(pszFile));
GetDataDir(pszFile); fileout = fopen(pszFile, "a");
strlcat(pszFile, "/debug.log", sizeof(pszFile)); setbuf(fileout, NULL); // unbuffered
fileout = fopen(pszFile, "a"); }
nOpenTime = GetTime(); if (fileout)
} {
if (fileout) //// Debug print useful for profiling
{ //fprintf(fileout, " %"PRI64d" ", GetTimeMillis());
//// Debug print useful for profiling va_list arg_ptr;
//fprintf(fileout, " %"PRI64d" ", GetTimeMillis()); va_start(arg_ptr, pszFormat);
va_list arg_ptr; ret = vfprintf(fileout, pszFormat, arg_ptr);
va_start(arg_ptr, pszFormat); va_end(arg_ptr);
ret = vfprintf(fileout, pszFormat, arg_ptr);
va_end(arg_ptr);
fflush(fileout);
}
} }
} }
#ifdef __WXMSW__ #ifdef __WXMSW__
if (fPrintToDebugger) if (fPrintToDebugger)
{ {
static CCriticalSection cs_OutputDebugStringF;
// accumulate a line at a time // accumulate a line at a time
CRITICAL_BLOCK(cs_OutputDebugStringF) CRITICAL_BLOCK(cs_OutputDebugStringF)
{ {