From 6e1db5b299f11dd5afb9b6d00845c9d1b4ac0017 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 9 Jul 1998 23:50:37 +0200
Subject: [PATCH] Added some black magic to init_threads_disable().

Rev: src/threads.c:1.74
---
 src/threads.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/threads.c b/src/threads.c
index 49c50e51ce..c1f3db6f7d 100644
--- a/src/threads.c
+++ b/src/threads.c
@@ -1,5 +1,5 @@
 #include "global.h"
-RCSID("$Id: threads.c,v 1.73 1998/07/05 13:51:50 grubba Exp $");
+RCSID("$Id: threads.c,v 1.74 1998/07/09 21:50:37 grubba Exp $");
 
 int num_threads = 1;
 int threads_disabled = 0;
@@ -174,7 +174,22 @@ void exit_threads_disable(struct object *o)
 
 void init_threads_disable(struct object *o)
 {
-  threads_disabled++;
+  /* Serious black magic to avoid dead-locks */
+
+  if (!threads_disabled) {
+    extern MUTEX_T password_protection_mutex;
+
+    THREADS_ALLOW_UID();
+    mt_lock(&password_protection_mutex);
+    THREADS_DISALLOW_UID();
+
+    threads_disabled = 1;
+
+    mt_unlock(&password_protection_mutex);
+  } else {
+    threads_disabled++;
+  }
+
   THREADS_FPRINTF((stderr, "init_threads_disable(): threads_disabled:%d\n",
 		   threads_disabled));
   while (live_threads) {
-- 
GitLab