Module: wine Branch: master Commit: c03b7fd9cb416ef5a4bd44729ac234ef71481553 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c03b7fd9cb416ef5a4bd44729a...
Author: Piotr Caban piotr@codeweavers.com Date: Mon Mar 27 10:28:29 2017 +0200
msvcrt: Throw improper_lock exception in critical_section::lock and try_lock_for.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 f4cf558..8e2bcc9 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);