From c03b7fd9cb416ef5a4bd44729ac234ef71481553 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Mon, 27 Mar 2017 10:28:29 +0200 Subject: [PATCH] msvcrt: Throw improper_lock exception in critical_section::lock and try_lock_for. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- dlls/msvcrt/lock.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/dlls/msvcrt/lock.c b/dlls/msvcrt/lock.c index f4cf55866fe..8e2bcc9404a 100644 --- a/dlls/msvcrt/lock.c +++ b/dlls/msvcrt/lock.c @@ -366,10 +366,8 @@ void __thiscall critical_section_lock(critical_section *this) TRACE("(%p)\n", this); - if(this->unk_thread_id == GetCurrentThreadId()) { - FIXME("throw exception\n"); - return; - } + if(this->unk_thread_id == GetCurrentThreadId()) + throw_exception(EXCEPTION_IMPROPER_LOCK, 0, "Already locked"); memset(&q, 0, sizeof(q)); last = InterlockedExchangePointer(&this->tail, &q); @@ -394,10 +392,8 @@ MSVCRT_bool __thiscall critical_section_try_lock(critical_section *this) TRACE("(%p)\n", this); - if(this->unk_thread_id == GetCurrentThreadId()) { - FIXME("throw exception\n"); + if(this->unk_thread_id == GetCurrentThreadId()) return FALSE; - } memset(&q, 0, sizeof(q)); if(!InterlockedCompareExchangePointer(&this->tail, &q, NULL)) { @@ -466,10 +462,8 @@ MSVCRT_bool __thiscall critical_section_try_lock_for( TRACE("(%p %d)\n", this, timeout); - if(this->unk_thread_id == GetCurrentThreadId()) { - FIXME("throw exception\n"); - return FALSE; - } + if(this->unk_thread_id == GetCurrentThreadId()) + throw_exception(EXCEPTION_IMPROPER_LOCK, 0, "Already locked"); if(!(q = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*q)))) return critical_section_try_lock(this);