-const char errlog_rcs[] = "$Id: errlog.c,v 1.57 2007/10/27 13:02:26 fabiankeil Exp $";
+const char errlog_rcs[] = "$Id: errlog.c,v 1.61 2007/11/04 19:03:01 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/errlog.c,v $
*
* Revisions :
* $Log: errlog.c,v $
+ * Revision 1.61 2007/11/04 19:03:01 fabiankeil
+ * Fix another deadlock Hal spotted and that mysteriously didn't affect FreeBSD.
+ *
+ * Revision 1.60 2007/11/03 19:03:31 fabiankeil
+ * - Prevent the Windows GUI from showing the version two times in a row.
+ * - Stop using the imperative in the "(Re-)Open logfile" message.
+ * - Ditch the "Switching to daemon mode" message as the detection
+ * whether or not we're already in daemon mode doesn't actually work.
+ *
+ * Revision 1.59 2007/11/01 12:50:56 fabiankeil
+ * Here's looking at you, deadlock.
+ *
+ * Revision 1.58 2007/10/28 19:04:21 fabiankeil
+ * Don't mention daemon mode in "Logging disabled" message. Some
+ * platforms call it differently and it's not really relevant anyway.
+ *
* Revision 1.57 2007/10/27 13:02:26 fabiankeil
* Relocate daemon-mode-related log messages to make sure
* they aren't shown again in case of configuration reloads.
/* Cleanup - remove taskbar icon etc. */
TermLogWindow();
-
-#else /* if !defined(_WIN32) || defined(_WIN_CONSOLE) */
- fputs(error_message, logfp);
#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */
+ if (logfp != NULL)
+ {
+ fputs(error_message, logfp);
+ }
+
#if defined(unix)
if (pidfile)
{
*********************************************************************/
void disable_logging(void)
{
- lock_logfile();
if (logfp != NULL)
{
log_error(LOG_LEVEL_INFO, "No logfile configured. Logging disabled.");
+ lock_logfile();
fclose(logfp);
logfp = NULL;
+ unlock_logfile();
}
- unlock_logfile();
}
assert(NULL != logfname);
lock_loginit();
- lock_logfile();
- if (logfp == stderr)
- {
- log_error(LOG_LEVEL_INFO,
- "Switching to daemon mode. Log messages will be written to: %s", logfname);
- }
- else if (logfp != NULL)
+ if (logfp != NULL)
{
- log_error(LOG_LEVEL_INFO, "(Re-)Open logfile \'%s\'", logfname ? logfname : "none");
+ log_error(LOG_LEVEL_INFO, "(Re-)Opening logfile \'%s\'", logfname);
}
/* set the designated log file */
/* set logging to be completely unbuffered */
setbuf(fp, NULL);
+ lock_logfile();
if (logfp != NULL)
{
fclose(logfp);
logfp = fp;
unlock_logfile();
+#if !defined(_WIN32)
+ /*
+ * Prevent the Windows GUI from showing the version two
+ * times in a row on startup. It already displayed the show_version()
+ * call from init_log_module() that other systems write to stderr.
+ *
+ * This means mingw32 users will never see the version in their
+ * log file, but I assume they wouldn't look for it there anyway
+ * and simply use the "Help/About Privoxy" menu.
+ */
show_version(prog_name);
+#endif /* def unix */
unlock_loginit();
* settings and that logging is enabled.
* Bail out otherwise.
*/
- if ((0 == (loglevel & debug)) || (logfp == NULL))
+ if ((loglevel != LOG_LEVEL_FATAL) &&
+ ((0 == (loglevel & debug)) || (logfp == NULL)))
{
return;
}
snprintf(tempbuf, sizeof(tempbuf),
"%s Privoxy(%08lx) Fatal error: log_error() failed to allocate buffer memory.\n"
"\nExiting.", timestamp, thread_id);
- assert(NULL != logfp);
- fputs(tempbuf, logfp);
- unlock_logfile();
fatal_error(tempbuf); /* Exit */
}
}
loglevel = LOG_LEVEL_FATAL;
}
- assert(NULL != logfp);
+ assert(NULL != logfp || loglevel == LOG_LEVEL_FATAL);
if (loglevel == LOG_LEVEL_FATAL)
{