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