From: Tom Keiser Date: Wed, 1 Feb 2006 16:09:01 +0000 (+0000) Subject: osi-audit-locking-fix-20060201 X-Git-Tag: openafs-devel-1_5_0~55 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=73f52f37e4c1be81fad5122787382a480c220af5 osi-audit-locking-fix-20060201 FIXES 25955 fix aix builds --- diff --git a/src/audit/audit.c b/src/audit/audit.c index 7fe3f9a..440e423 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 eea7bba..398a1d8 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 6dddc8a..3f0ebc9 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 e350d4f..c1ea8a5 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 69418a7..9567dbd 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 517ccd5..086960d 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -1638,6 +1638,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 9d1a9f1..d2f4711 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 ceada2c..63eeae6 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 */