diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index a2974c0483703e9436a469309c9d4157e04ead37..9083e1c1f2ffcf93e1c679cf4a192c45aec341c2 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -316,8 +316,15 @@ static void recycle_all()
 }
 
 #ifdef __unix__
+pthread_once_t setid_mutex_once = PTHREAD_ONCE_INIT;
 static pthread_mutex_t setid_mutex;
-static BOOL setid_mutex_initialized=0;
+
+static void
+init_setuid_mutex(void)
+{
+	pthread_mutex_init(&setid_mutex, NULL);
+}
+
 /**********************************************************
 * Change uid of the calling process to the user if specified
 * **********************************************************/
@@ -334,11 +341,7 @@ static BOOL do_seteuid(BOOL to_new)
 	if(old_uid==new_uid && old_gid==new_gid)
 		return(TRUE);		/* do nothing */
 
-	if(!setid_mutex_initialized) {
-		pthread_mutex_init(&setid_mutex,NULL);
-		setid_mutex_initialized=TRUE;
-	}
-
+	pthread_once(&setid_mutex_once, init_setuid_mutex);
 	pthread_mutex_lock(&setid_mutex);
 
 	if(to_new) {
@@ -383,11 +386,7 @@ BOOL do_setuid(BOOL force)
 	if(old_uid==new_uid && old_gid==new_gid)
 		return(TRUE);		/* do nothing */
 
-	if(!setid_mutex_initialized) {
-		pthread_mutex_init(&setid_mutex,NULL);
-		setid_mutex_initialized=TRUE;
-	}
-
+	pthread_once(&setid_mutex_once, init_setuid_mutex);
 	pthread_mutex_lock(&setid_mutex);
 
 	if(getegid()!=old_gid) {