From ad7e408e18425900ffed5fc76349c7bb30e69cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 2 Feb 2007 17:12:00 +0000 Subject: [PATCH] The SemaphorePool method could hand out unbalanced semaphores - it only called Semaphore::ZeroCount() on new semaphores, not on used ones. Found by Stefano, thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20052 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/tty/SemaphorePool.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/add-ons/kernel/drivers/tty/SemaphorePool.cpp b/src/add-ons/kernel/drivers/tty/SemaphorePool.cpp index 5828ecf4a4..947ced244c 100644 --- a/src/add-ons/kernel/drivers/tty/SemaphorePool.cpp +++ b/src/add-ons/kernel/drivers/tty/SemaphorePool.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2005, Ingo Weinhold, bonefish@users.sf.net. + * Copyright 2005-2007, Ingo Weinhold, bonefish@users.sf.net. * Distributed under the terms of the MIT License. */ @@ -75,12 +75,6 @@ SemaphorePool::Get(Semaphore *&semaphore) if (!sem) return B_NO_MEMORY; - status_t error = sem->ZeroCount(); - if (error != B_OK) { - delete sem; - return error; - } - semaphore = sem; return B_OK; } @@ -94,7 +88,9 @@ SemaphorePool::Put(Semaphore *semaphore) MutexLocker _(fLock); - if (fCount >= fMaxCount || semaphore->InitCheck() != B_OK) { + if (fCount >= fMaxCount + || semaphore->InitCheck() != B_OK + || semaphore->ZeroCount() != B_OK) { delete semaphore; return; }