From ed9a2181217f19b7ddbfe28118f6fb2f700b08ad Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Wed, 7 Jun 2006 05:25:38 +0000 Subject: [PATCH] openlog-consistency-20060607 open logs consistently so assert logging is appended --- acinclude.m4 | 3 ++- src/util/serverLog.c | 51 ++++++++++++++++++++++++++------------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index fad4721..f9a7dab 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1044,7 +1044,8 @@ AC_SUBST(BUILD_LOGIN) AC_CHECK_FUNCS(utimes random srandom getdtablesize snprintf strlcat strlcpy re_comp re_exec) AC_CHECK_FUNCS(setprogname getprogname sigaction mkstemp vsnprintf strerror strcasestr) - +AC_CHECK_FUNCS(setvbuf) +AC_FUNC_SETVBUF_REVERSED AC_CHECK_FUNCS(regcomp regexec regerror) AC_MSG_CHECKING([for POSIX regex library]) if test "$ac_cv_header_regex_h" = "yes" && \ diff --git a/src/util/serverLog.c b/src/util/serverLog.c index 15b0895..e549517 100644 --- a/src/util/serverLog.c +++ b/src/util/serverLog.c @@ -313,20 +313,24 @@ OpenLog(const char *fileName) printf("Unable to open log file %s\n", fileName); return -1; } -#if defined(AFS_PTHREAD_ENV) /* redirect stdout and stderr so random printf's don't write to data */ - assert(freopen(NULLDEV, "w", stdout) != NULL); - assert(freopen(NULLDEV, "w", stderr) != NULL); + (void)freopen(fileName, "a", stdout); + (void)freopen(fileName, "a", stderr); +#ifdef HAVE_SETVBUF +#ifdef SETVBUF_REVERSED + setvbuf(stderr, _IONBF, NULL, 0); +#else + setvbuf(stderr, NULL, _IONBF, 0); +#endif +#else + setbuf(stderr, NULL); +#endif +#if defined(AFS_PTHREAD_ENV) assert(pthread_mutex_init(&serverLogMutex, NULL) == 0); +#endif /* AFS_PTHREAD_ENV */ serverLogFD = tempfd; -#else - close(tempfd); /* just checking.... */ - (void)freopen(fileName, "w", stdout); - (void)freopen(fileName, "w", stderr); - serverLogFD = fileno(stdout); -#endif /* AFS_PTHREAD_ENV */ return 0; } /*OpenLog */ @@ -356,27 +360,24 @@ ReOpenLog(const char *fileName) } #endif -#if defined(AFS_PTHREAD_ENV) LOCK_SERVERLOG(); if (serverLogFD > 0) close(serverLogFD); serverLogFD = open(fileName, O_WRONLY | O_APPEND | O_CREAT | (isfifo?O_NONBLOCK:0), 0666); - UNLOCK_SERVERLOG(); - return serverLogFD < 0 ? -1 : 0; + if (serverLogFD > 0) { + (void)freopen(fileName, "a", stdout); + (void)freopen(fileName, "a", stderr); +#ifdef HAVE_SETVBUF +#ifdef SETVBUF_REVERSED + setvbuf(stderr, _IONBF, NULL, 0); #else + setvbuf(stderr, NULL, _IONBF, 0); +#endif +#else + setbuf(stderr, NULL); +#endif - tempfd = open(fileName, O_WRONLY | O_APPEND | O_CREAT | (isfifo?O_NONBLOCK:0), 0666); - if (tempfd < 0) { - printf("Unable to open log file %s\n", fileName); - return -1; } - close(tempfd); - - (void)freopen(fileName, "a", stdout); - (void)freopen(fileName, "a", stderr); - serverLogFD = fileno(stdout); - - - return 0; -#endif /* AFS_PTHREAD_ENV */ + UNLOCK_SERVERLOG(); + return serverLogFD < 0 ? -1 : 0; } -- 1.9.4