X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=errlog.c;h=6319f35d0008638e1889118a5c878b9e667253bf;hb=daeac1da1e3d19b29970af1872a7d9f10dcc7cc4;hp=e8eb994f8e6872e22fd2fbcd3271d4553c17529c;hpb=1de90afc97418e72348dee366238db9c768bb6c7;p=privoxy.git diff --git a/errlog.c b/errlog.c index e8eb994f..6319f35d 100644 --- a/errlog.c +++ b/errlog.c @@ -1,4 +1,4 @@ -const char errlog_rcs[] = "$Id: errlog.c,v 1.72 2008/07/27 12:04:28 fabiankeil Exp $"; +const char errlog_rcs[] = "$Id: errlog.c,v 1.77 2008/09/07 12:43:44 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/errlog.c,v $ @@ -33,6 +33,27 @@ const char errlog_rcs[] = "$Id: errlog.c,v 1.72 2008/07/27 12:04:28 fabiankeil E * * Revisions : * $Log: errlog.c,v $ + * Revision 1.77 2008/09/07 12:43:44 fabiankeil + * Move the LogPutString() call in log_error() into the locked + * region so the Windows GUI log is consistent with the logfile. + * + * Revision 1.76 2008/09/07 12:35:05 fabiankeil + * Add mutex lock support for _WIN32. + * + * Revision 1.75 2008/09/04 08:13:58 fabiankeil + * Prepare for critical sections on Windows by adding a + * layer of indirection before the pthread mutex functions. + * + * Revision 1.74 2008/08/06 18:33:36 fabiankeil + * If the "close fd first" workaround doesn't work, + * the fatal error message will be lost, so we better + * explain the consequences while we still can. + * + * Revision 1.73 2008/08/04 19:06:55 fabiankeil + * Add a lame workaround for the "can't open an already open + * logfile on OS/2" problem reported by Maynard in #2028842 + * and describe what a real solution would look like. + * * Revision 1.72 2008/07/27 12:04:28 fabiankeil * Fix a comment typo. * @@ -426,24 +447,24 @@ static char *w32_socket_strerr(int errcode, char *tmp_buf); static char *os2_socket_strerr(int errcode, char *tmp_buf); #endif -#ifdef FEATURE_PTHREAD +#ifdef MUTEX_LOCKS_AVAILABLE static inline void lock_logfile(void) { - pthread_mutex_lock(&log_mutex); + privoxy_mutex_lock(&log_mutex); } static inline void unlock_logfile(void) { - pthread_mutex_unlock(&log_mutex); + privoxy_mutex_unlock(&log_mutex); } static inline void lock_loginit(void) { - pthread_mutex_lock(&log_init_mutex); + privoxy_mutex_lock(&log_init_mutex); } static inline void unlock_loginit(void) { - pthread_mutex_unlock(&log_init_mutex); + privoxy_mutex_unlock(&log_init_mutex); } -#else /* ! FEATURE_PTHREAD */ +#else /* ! MUTEX_LOCKS_AVAILABLE */ /* * FIXME we need a cross-platform locking mechanism. * The locking/unlocking functions below should be @@ -639,6 +660,10 @@ void init_error_log(const char *prog_name, const char *logfname) * reopen it if the file name changed or if the * configuration reloas was caused by a SIGHUP. */ + log_error(LOG_LEVEL_INFO, "Failed to reopen logfile: \'%s\'. " + "Retrying after closing the old file descriptor first. If that " + "doesn't work, Privoxy will exit without being able to log a message.", + logfname); lock_logfile(); fclose(logfp); logfp = NULL; @@ -756,9 +781,9 @@ static inline size_t get_log_timestamp(char *buffer, size_t buffer_size) #ifdef HAVE_LOCALTIME_R tm_now = *localtime_r(&now, &tm_now); #elif FEATURE_PTHREAD - pthread_mutex_lock(&localtime_mutex); + privoxy_mutex_lock(&localtime_mutex); tm_now = *localtime(&now); - pthread_mutex_unlock(&localtime_mutex); + privoxy_mutex_unlock(&localtime_mutex); #else tm_now = *localtime(&now); #endif @@ -814,18 +839,18 @@ static inline size_t get_clf_timestamp(char *buffer, size_t buffer_size) #ifdef HAVE_GMTIME_R gmt = *gmtime_r(&now, &gmt); #elif FEATURE_PTHREAD - pthread_mutex_lock(&gmtime_mutex); + privoxy_mutex_lock(&gmtime_mutex); gmt = *gmtime(&now); - pthread_mutex_unlock(&gmtime_mutex); + privoxy_mutex_unlock(&gmtime_mutex); #else gmt = *gmtime(&now); #endif #ifdef HAVE_LOCALTIME_R tm_now = localtime_r(&now, &dummy); #elif FEATURE_PTHREAD - pthread_mutex_lock(&localtime_mutex); + privoxy_mutex_lock(&localtime_mutex); tm_now = localtime(&now); - pthread_mutex_unlock(&localtime_mutex); + privoxy_mutex_unlock(&localtime_mutex); #else tm_now = localtime(&now); #endif @@ -1031,9 +1056,9 @@ void log_error(int loglevel, const char *fmt, ...) { outbuf[length++] = ch; /* - * XXX: Only necessary on platforms which don't use pthread - * mutexes (mingw32 for example), where multiple threads can - * write to the buffer at the same time. + * XXX: Only necessary on platforms where multiple threads + * can write to the buffer at the same time because we + * don't support mutexes (OS/2 for example). */ outbuf[length] = '\0'; continue; @@ -1228,13 +1253,14 @@ void log_error(int loglevel, const char *fmt, ...) { fputs(outbuf_save, logfp); } - unlock_logfile(); #if defined(_WIN32) && !defined(_WIN_CONSOLE) /* Write to display */ LogPutString(outbuf_save); #endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */ + unlock_logfile(); + }