changeset 302:364320c61656 draft

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
author gavinandresen <gavinandresen@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Thu, 18 Nov 2010 00:11:33 +0000
parents 55442696faa0
children 2a6087751e66 ae9e12688579
files util.cpp
diffstat 1 files changed, 20 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/util.cpp
+++ b/util.cpp
@@ -145,8 +145,6 @@
 
 inline int OutputDebugStringF(const char* pszFormat, ...)
 {
-    static CCriticalSection cs_OutputDebugStringF;
-
     int ret = 0;
     if (fPrintToConsole)
     {
@@ -158,38 +156,33 @@
     }
     else
     {
-        CRITICAL_BLOCK(cs_OutputDebugStringF)
-        {
-            // print to debug.log
-            static FILE* fileout = NULL;
-            static int64 nOpenTime = 0;
+        // print to debug.log
+        static FILE* fileout = NULL;
 
-            if (GetTime()-nOpenTime > 10 * 60)
-            {
-                if (fileout)
-                    fclose(fileout);
-                char pszFile[MAX_PATH+100];
-                GetDataDir(pszFile);
-                strlcat(pszFile, "/debug.log", sizeof(pszFile));
-                fileout = fopen(pszFile, "a");
-                nOpenTime = GetTime();
-            }
-            if (fileout)
-            {
-                //// Debug print useful for profiling
-                //fprintf(fileout, " %"PRI64d" ", GetTimeMillis());
-                va_list arg_ptr;
-                va_start(arg_ptr, pszFormat);
-                ret = vfprintf(fileout, pszFormat, arg_ptr);
-                va_end(arg_ptr);
-                fflush(fileout);
-            }
+        if (!fileout)
+        {
+            char pszFile[MAX_PATH+100];
+            GetDataDir(pszFile);
+            strlcat(pszFile, "/debug.log", sizeof(pszFile));
+            fileout = fopen(pszFile, "a");
+            setbuf(fileout, NULL); // unbuffered
+        }
+        if (fileout)
+        {
+            //// Debug print useful for profiling
+            //fprintf(fileout, " %"PRI64d" ", GetTimeMillis());
+            va_list arg_ptr;
+            va_start(arg_ptr, pszFormat);
+            ret = vfprintf(fileout, pszFormat, arg_ptr);
+            va_end(arg_ptr);
         }
     }
 
 #ifdef __WXMSW__
     if (fPrintToDebugger)
     {
+        static CCriticalSection cs_OutputDebugStringF;
+
         // accumulate a line at a time
         CRITICAL_BLOCK(cs_OutputDebugStringF)
         {