microdc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[microdc-devel] [patch] Crash while turning on logfile (happens only on


From: Alex Dedul
Subject: [microdc-devel] [patch] Crash while turning on logfile (happens only on amd64?)
Date: Sat, 26 Jan 2008 01:40:57 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8) Gecko/20060112 Thunderbird/1.5 Mnenhy/0.7.3.0

Hi,

It was reported earlier about this issue, attached simple patch to fix this.

Regards, Alex.
diff -r 66dce28c7f4f -r 79d1f54bfcae src/screen.c
--- a/src/screen.c      Fri Jan 25 18:46:56 2008 +0200
+++ b/src/screen.c      Sat Jan 26 01:28:53 2008 +0200
@@ -228,10 +228,29 @@ static void
 static void
 flag_vputf(DCDisplayFlag flag, const char *format, va_list args)
 {
-    //va_list args2;
+    if (log_fh != NULL && log_flags & flag) {
+        char c_time[1024];
+        time_t now = time(NULL);
+        struct tm _tm = {0};
+        va_list args_dup;
 
-    //va_copy(args2, args);
+        if (NULL != localtime_r(&now, &_tm) && 0 != strftime(c_time, 1023, 
"%d.%m.%Y %H:%M:%S", &_tm)) {
+            fprintf(log_fh, "%s ", c_time);
+        }
 
+        // args would become undefined after xvasprintf() call, so make a copy 
+        // of args to use it later below.
+        va_copy(args_dup, args);
+        char* msg = xvasprintf(format, args_dup);
+        va_end(args_dup);
+
+        char* log_msg = main_to_log_string(msg);
+        free(msg);
+        fprintf(log_fh, log_msg);
+        free(log_msg);
+        fflush(log_fh);
+    }
+    
     if (display_flags & flag) {
         if (screen_state == SCREEN_SUSPENDED) {
             ptrv_append(suspend_msgs, xvasprintf(format, args));
@@ -243,21 +262,6 @@ flag_vputf(DCDisplayFlag flag, const cha
             vprintf(format, args);
             fflush(stdout);
         }
-    }
-    if (log_fh != NULL && log_flags & flag) {
-        char c_time[1024];
-        time_t now = time(NULL);
-        struct tm _tm = {0};
-        if (NULL != localtime_r(&now, &_tm) && 0 != strftime(c_time, 1023, 
"%d.%m.%Y %H:%M:%S", &_tm)) {
-            fprintf(log_fh, "%s ", c_time);
-        }
-        char* msg = xvasprintf(format, args);
-        //va_end(args2);
-        char* log_msg = main_to_log_string(msg);
-        free(msg);
-        fprintf(log_fh, log_msg);
-        free(log_msg);
-        fflush(log_fh);
     }
 }
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]