[Gnucash-changes] Stephen Evanchik's trace crash patch.

Derek Atkins warlord at cvs.gnucash.org
Thu Dec 2 10:20:10 EST 2004


Log Message:
-----------
Stephen Evanchik's trace crash patch.

	* src/engine/gnc-trace.c: Try a few different filenames for
	  the trace log and if all else fails fall back to stderr.

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/engine:
        gnc-trace.c

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1861
retrieving revision 1.1862
diff -LChangeLog -LChangeLog -u -r1.1861 -r1.1862
--- ChangeLog
+++ ChangeLog
@@ -3,6 +3,9 @@
 	* src/business/business-ledger/Makefile.am: add explicit
 	  dependency on business-utils.
 
+	* src/engine/gnc-trace.c: Try a few different filenames for
+	  the trace log and if all else fails fall back to stderr.
+
 2004-11-27  Christian Stimming  <stimming at tuhh.de>
 
 	* src/import-export/import-backend.c
Index: gnc-trace.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-trace.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -Lsrc/engine/gnc-trace.c -Lsrc/engine/gnc-trace.c -u -r1.11 -r1.12
--- src/engine/gnc-trace.c
+++ src/engine/gnc-trace.c
@@ -26,6 +26,11 @@
 #include "config.h"
 
 #include <glib.h>
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#else
+  /* What to do? */
+#endif
 #include <stdarg.h>
 #include <string.h>
 #include <sys/time.h>
@@ -65,6 +70,7 @@
 };
 
 static FILE *fout = NULL;
+static const int MAX_TRACE_FILENAME = 100;
 
 static void
 fh_printer (const gchar   *log_domain,
@@ -74,14 +80,24 @@
 {
   FILE *fh = user_data;
   fprintf (fh, "%s\n", message);
+  fflush(fh);
 }
 
 void 
 gnc_log_init (void)
 {
-   fout = stderr;
-   fout = stdout;
+   char *filename;
+
    fout = fopen ("/tmp/gnucash.trace", "w");
+
+   if(!fout && (filename = (char *)malloc(MAX_TRACE_FILENAME))) {
+      snprintf(filename, MAX_TRACE_FILENAME-1, "/tmp/gnucash.trace.%d", getpid());
+      fout = fopen (filename, "w");
+   }
+
+   if(!fout)
+      fout = stderr;
+
    g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, fh_printer, fout);
 }
 


More information about the gnucash-changes mailing list