From: Tom Keiser Date: Mon, 13 Feb 2006 17:57:26 +0000 (+0000) Subject: STABLE14-osi-audit-locking-fix-20060201 X-Git-Tag: openafs-stable-1_4_1-rc7~9 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=4647e500f0e3a346ead40e6ecf10824e1d8ffb9e;p=packages%2Fo%2Fopenafs.git STABLE14-osi-audit-locking-fix-20060201 FIXES 25955 fix aix builds (cherry picked from commit 73f52f37e4c1be81fad5122787382a480c220af5) --- diff --git a/src/audit/audit.c b/src/audit/audit.c index aeea18567..bc3dca5b2 100644 --- a/src/audit/audit.c +++ b/src/audit/audit.c @@ -257,15 +257,25 @@ printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList) fprintf(out, "\n"); } -static struct Lock audlock; -static afs_int32 lock_init = 0; +#ifdef AFS_PTHREAD_ENV +static pthread_mutex_t audit_lock; +static volatile afs_int32 audit_lock_initialized = 0; +static pthread_once_t audit_lock_once = PTHREAD_ONCE_INIT; + +static void +osi_audit_init_lock(void) +{ + pthread_mutex_init(&audit_lock, NULL); + audit_lock_initialized = 1; +} +#endif + void osi_audit_init(void) { #ifdef AFS_PTHREAD_ENV - if ( !lock_init ) { - Lock_Init(&audlock); - lock_init = 1; + if (!audit_lock_initialized) { + pthread_once(&audit_lock_once, osi_audit_init_lock); } #endif /* AFS_PTHREAD_ENV */ } @@ -287,11 +297,10 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */ va_list vaList; #ifdef AFS_PTHREAD_ENV - /* This is not thread safe. Lock initialization should - * be done in a server initialization phase - */ - if ( !lock_init ) - osi_audit_init(); + /* i'm pretty sure all the server apps now call osi_audit_init(), + * but to be extra careful we'll leave this assert in here for a + * while to make sure */ + assert(audit_lock_initialized); #endif /* AFS_PTHREAD_ENV */ if ((osi_audit_all < 0) || (osi_echo_trail < 0)) @@ -324,7 +333,7 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */ } #ifdef AFS_PTHREAD_ENV - ObtainWriteLock(&audlock); + pthread_mutex_lock(&audit_lock); #endif #ifdef AFS_AIX32_ENV bufferPtr = BUFFER; @@ -361,7 +370,7 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */ } #endif #ifdef AFS_PTHREAD_ENV - ReleaseWriteLock(&audlock); + pthread_mutex_unlock(&audit_lock); #endif return 0; diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index 6162dbb9f..bf39de5a2 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -743,6 +743,7 @@ main(int argc, char **argv, char **envp) sigaction(SIGSEGV, &nsa, NULL); sigaction(SIGABRT, &nsa, NULL); #endif + osi_audit_init(); #ifdef BOS_RESTRICTED_MODE signal(SIGFPE, bozo_insecureme); #endif diff --git a/src/budb/server.c b/src/budb/server.c index 6dddc8ac1..3f0ebc974 100644 --- a/src/budb/server.c +++ b/src/budb/server.c @@ -395,6 +395,7 @@ main(argc, argv) sigaction(SIGSEGV, &nsa, NULL); sigaction(SIGABRT, &nsa, NULL); #endif + osi_audit_init(); osi_audit(BUDB_StartEvent, 0, AUD_END); initialize_BUDB_error_table(); diff --git a/src/kauth/kaserver.c b/src/kauth/kaserver.c index e350d4fc6..c1ea8a5c7 100644 --- a/src/kauth/kaserver.c +++ b/src/kauth/kaserver.c @@ -198,6 +198,8 @@ main(argc, argv) sigaction(SIGABRT, &nsa, NULL); sigaction(SIGSEGV, &nsa, NULL); #endif + osi_audit_init(); + if (argc == 0) { usage: printf("Usage: kaserver [-noAuth] [-fastKeys] [-database ] " diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index 69418a754..9567dbda5 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -243,6 +243,7 @@ main(int argc, char **argv) sigaction(SIGABRT, &nsa, NULL); sigaction(SIGSEGV, &nsa, NULL); #endif + osi_audit_init(); osi_audit(PTS_StartEvent, 0, AUD_END); /* Initialize dirpaths */ diff --git a/src/viced/viced.c b/src/viced/viced.c index ec9bddbc2..207c2928a 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -1628,6 +1628,7 @@ main(int argc, char *argv[]) sigaction(SIGABRT, &nsa, NULL); sigaction(SIGSEGV, &nsa, NULL); #endif + osi_audit_init(); /* Initialize dirpaths */ if (!(initAFSDirPath() & AFSDIR_SERVER_PATHS_OK)) { diff --git a/src/vlserver/vlserver.c b/src/vlserver/vlserver.c index 9d1a9f180..d2f471141 100644 --- a/src/vlserver/vlserver.c +++ b/src/vlserver/vlserver.c @@ -160,6 +160,8 @@ main(argc, argv) sigaction(SIGABRT, &nsa, NULL); sigaction(SIGSEGV, &nsa, NULL); #endif + osi_audit_init(); + /* Parse command line */ for (index = 1; index < argc; index++) { if (strcmp(argv[index], "-noauth") == 0) { diff --git a/src/volser/volmain.c b/src/volser/volmain.c index ceada2c3f..63eeae624 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -259,6 +259,7 @@ main(int argc, char **argv) sigaction(SIGABRT, &nsa, NULL); sigaction(SIGSEGV, &nsa, NULL); #endif + osi_audit_init(); osi_audit(VS_StartEvent, 0, AUD_END); /* Initialize dirpaths */