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 */
}
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))
}
#ifdef AFS_PTHREAD_ENV
- ObtainWriteLock(&audlock);
+ pthread_mutex_lock(&audit_lock);
#endif
#ifdef AFS_AIX32_ENV
bufferPtr = BUFFER;
}
#endif
#ifdef AFS_PTHREAD_ENV
- ReleaseWriteLock(&audlock);
+ pthread_mutex_unlock(&audit_lock);
#endif
return 0;
sigaction(SIGSEGV, &nsa, NULL);
sigaction(SIGABRT, &nsa, NULL);
#endif
+ osi_audit_init();
#ifdef BOS_RESTRICTED_MODE
signal(SIGFPE, bozo_insecureme);
#endif
sigaction(SIGSEGV, &nsa, NULL);
sigaction(SIGABRT, &nsa, NULL);
#endif
+ osi_audit_init();
osi_audit(BUDB_StartEvent, 0, AUD_END);
initialize_BUDB_error_table();
sigaction(SIGABRT, &nsa, NULL);
sigaction(SIGSEGV, &nsa, NULL);
#endif
+ osi_audit_init();
+
if (argc == 0) {
usage:
printf("Usage: kaserver [-noAuth] [-fastKeys] [-database <dbpath>] "
sigaction(SIGABRT, &nsa, NULL);
sigaction(SIGSEGV, &nsa, NULL);
#endif
+ osi_audit_init();
osi_audit(PTS_StartEvent, 0, AUD_END);
/* Initialize dirpaths */
sigaction(SIGABRT, &nsa, NULL);
sigaction(SIGSEGV, &nsa, NULL);
#endif
+ osi_audit_init();
/* Initialize dirpaths */
if (!(initAFSDirPath() & AFSDIR_SERVER_PATHS_OK)) {
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) {
sigaction(SIGABRT, &nsa, NULL);
sigaction(SIGSEGV, &nsa, NULL);
#endif
+ osi_audit_init();
osi_audit(VS_StartEvent, 0, AUD_END);
/* Initialize dirpaths */