From 5e49cb98ac09b85d830f443a4c006d91764d2e35 Mon Sep 17 00:00:00 2001 From: Michael Meffie Date: Tue, 3 Feb 2015 21:07:34 -0500 Subject: [PATCH] util: always initialize the server log mutex Be sure to always initialize the server log mutex. Use pthread_once to ensure the mutex is initialized only once. Before this change the server log mutex was not properly initialized with pthread_mutex_init when logging to the syslog. Change-Id: Ief2ee6b373f7309bc05061f7413b6ff623b86e31 Reviewed-on: https://gerrit.openafs.org/11717 Reviewed-by: Chas Williams <3chas3@gmail.com> Reviewed-by: Benjamin Kaduk Tested-by: BuildBot --- src/util/serverLog.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/util/serverLog.c b/src/util/serverLog.c index fb4862fb6..b7b146532 100644 --- a/src/util/serverLog.c +++ b/src/util/serverLog.c @@ -34,6 +34,7 @@ #if defined(AFS_PTHREAD_ENV) #include +static pthread_once_t serverLogOnce = PTHREAD_ONCE_INIT; static pthread_mutex_t serverLogMutex; #define LOCK_SERVERLOG() opr_Verify(pthread_mutex_lock(&serverLogMutex) == 0) #define UNLOCK_SERVERLOG() opr_Verify(pthread_mutex_unlock(&serverLogMutex) == 0) @@ -312,6 +313,14 @@ SetupLogSignals(void) #endif } +#if defined(AFS_PTHREAD_ENV) +static void +InitServerLogMutex(void) +{ + opr_Verify(pthread_mutex_init(&serverLogMutex, NULL) == 0); +} +#endif /* AFS_PTHREAD_ENV */ + int OpenLog(const char *fileName) { @@ -327,7 +336,13 @@ OpenLog(const char *fileName) #ifndef AFS_NT40_ENV struct stat statbuf; +#endif +#if defined(AFS_PTHREAD_ENV) + opr_Verify(pthread_once(&serverLogOnce, InitServerLogMutex) == 0); +#endif /* AFS_PTHREAD_ENV */ + +#ifndef AFS_NT40_ENV if (serverLogSyslog) { openlog(serverLogSyslogTag, LOG_PID, serverLogSyslogFacility); return (0); @@ -388,10 +403,6 @@ OpenLog(const char *fileName) #endif } -#if defined(AFS_PTHREAD_ENV) - opr_Verify(pthread_mutex_init(&serverLogMutex, NULL) == 0); -#endif /* AFS_PTHREAD_ENV */ - serverLogFD = tempfd; return 0; -- 2.39.5