From 840a9bdb8d480d280ce739a43acd154976cfd907 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Sat, 9 Aug 2003 16:43:34 +0000 Subject: 2003-06-16 Ognyan Kulev * mgt.c (S_proc_dostop): Instead of suspending all threads except CONTTHREAD, first suspend all threads, and then resume CONTTHREAD. --- proc/mgt.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'proc/mgt.c') diff --git a/proc/mgt.c b/proc/mgt.c index fbc86c6c..2fcefa86 100644 --- a/proc/mgt.c +++ b/proc/mgt.c @@ -1,5 +1,5 @@ /* Process management - Copyright (C) 1992,93,94,95,96,99,2000,01,02 Free Software Foundation, Inc. + Copyright (C) 1992,93,94,95,96,99,2000,01,02,03 Free Software Foundation, Inc. This file is part of the GNU Hurd. @@ -348,14 +348,17 @@ S_proc_dostop (struct proc *p, task_resume (p->p_task); return err; } + /* We can not compare the thread ports with CONTTHREAD, as CONTTHREAD + might be a proxy port (for example in rpctrace). For this reason + we suspend all threads and then resume CONTTHREAD. */ for (i = 0; i < nthreads; i++) { - if (threads[i] != contthread) - thread_suspend (threads[i]); + thread_suspend (threads[i]); mach_port_deallocate (mach_task_self (), threads[i]); } if (threads != threadbuf) munmap (threads, nthreads * sizeof (thread_t)); + thread_resume (contthread); err = task_resume (p->p_task); if (err) return err; -- cgit v1.2.3