From f4a8c33b5cb3eafd02244bbe8d014ebe37d952bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 19 Jul 2005 18:10:12 +0000 Subject: [PATCH] Fixed a bug in put_death_stack_and_reschedule(): release_sem_etc() was called with the thread lock held, which might have caused a panic later on, if there was another thread waiting for the death stack semaphore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13769 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/thread.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/thread.c b/src/system/kernel/thread.c index 20042f58aa..ab27d15652 100644 --- a/src/system/kernel/thread.c +++ b/src/system/kernel/thread.c @@ -722,11 +722,13 @@ put_death_stack_and_reschedule(uint32 index) disable_interrupts(); GRAB_THREAD_LOCK(); - sDeathStackBitmap &= ~(1 << index); + RELEASE_THREAD_LOCK(); release_sem_etc(sDeathStackSem, 1, B_DO_NOT_RESCHEDULE); + // we must not have acquired the thread lock when releasing a semaphore + GRAB_THREAD_LOCK(); scheduler_reschedule(); // requires thread lock to be held }