osi-audit-locking-fix-20060201
authorTom Keiser <tkeiser@gmail.com>
Wed, 1 Feb 2006 16:09:01 +0000 (16:09 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 1 Feb 2006 16:09:01 +0000 (16:09 +0000)
FIXES 25955

fix aix builds

src/audit/audit.c
src/bozo/bosserver.c
src/budb/server.c
src/kauth/kaserver.c
src/ptserver/ptserver.c
src/viced/viced.c
src/vlserver/vlserver.c
src/volser/volmain.c

index 7fe3f9a..440e423 100644 (file)
@@ -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;
index eea7bba..398a1d8 100644 (file)
@@ -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
index 6dddc8a..3f0ebc9 100644 (file)
@@ -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();
index e350d4f..c1ea8a5 100644 (file)
@@ -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 <dbpath>] "
index 69418a7..9567dbd 100644 (file)
@@ -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 */
index 517ccd5..086960d 100644 (file)
@@ -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)) {
index 9d1a9f1..d2f4711 100644 (file)
@@ -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) {
index ceada2c..63eeae6 100644 (file)
@@ -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 */