From c83bde410aa07480175ab2b0743c35da9a0572bb Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 5 Apr 2012 17:35:59 +0200 Subject: [PATCH] switch_sem_etc(): Unbreak the actual switch case The scheduler lock was still being held when release_sem_etc() was called. The bug was introduced in 24df65921befcd0ad0c5c7866118f922da61cb96. Fixes #8448. --- src/system/kernel/sem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/system/kernel/sem.cpp b/src/system/kernel/sem.cpp index 2c460b9e16..ad32ddd349 100644 --- a/src/system/kernel/sem.cpp +++ b/src/system/kernel/sem.cpp @@ -844,6 +844,7 @@ switch_sem_etc(sem_id semToBeReleased, sem_id id, int32 count, thread_prepare_to_block(thread, flags, THREAD_BLOCK_TYPE_SEMAPHORE, (void*)(addr_t)id); + schedulerLocker.Unlock(); RELEASE_SEM_LOCK(sSems[slot]); // release the other semaphore, if any