From: Derek Lesho Subject: [PATCH v4 10/11] ntoskrnl.exe: Set owner in fast mutex functions. Message-Id: <20190411194558.31939-10-dereklesho52@Gmail.com> Date: Thu, 11 Apr 2019 15:45:57 -0400 In-Reply-To: <20190411182706.25812-10-dereklesho52@Gmail.com> References: <20190411182706.25812-10-dereklesho52@Gmail.com> Signed-off-by: Derek Lesho --- dlls/hal/hal.c | 9 ++++++++- dlls/ntoskrnl.exe/sync.c | 14 ++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/dlls/hal/hal.c b/dlls/hal/hal.c index 269a551f17..d8452952f1 100644 --- a/dlls/hal/hal.c +++ b/dlls/hal/hal.c @@ -89,9 +89,16 @@ void WINAPI ExReleaseFastMutex( FAST_MUTEX *mutex ) DEFINE_FASTCALL1_WRAPPER( ExTryToAcquireFastMutex ) BOOLEAN WINAPI ExTryToAcquireFastMutex( FAST_MUTEX *mutex ) { + BOOLEAN ret; + TRACE("mutex %p.\n", mutex); - return (InterlockedCompareExchange( &mutex->Count, 0, 1 ) == 1); + ret = (InterlockedCompareExchange( &mutex->Count, 0, 1 ) == 1); + + if (ret) + mutex->Owner = KeGetCurrentThread(); + + return ret; } DEFINE_FASTCALL1_WRAPPER( KfAcquireSpinLock ) diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index fbe9dbe9da..e97c6993f9 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -696,13 +696,12 @@ PSLIST_ENTRY WINAPI NTOSKRNL_ExInterlockedPushEntrySList( PSLIST_HEADER list, PS DEFINE_FASTCALL1_WRAPPER(ExAcquireFastMutexUnsafe) void WINAPI ExAcquireFastMutexUnsafe( FAST_MUTEX *mutex ) { - LONG count; - TRACE("mutex %p.\n", mutex); - count = InterlockedDecrement( &mutex->Count ); - if (count < 0) + if (InterlockedDecrement(&mutex->Count) < 0) KeWaitForSingleObject( &mutex->Event, Executive, KernelMode, FALSE, NULL ); + + mutex->Owner = KeGetCurrentThread(); } /*********************************************************************** @@ -711,12 +710,11 @@ void WINAPI ExAcquireFastMutexUnsafe( FAST_MUTEX *mutex ) DEFINE_FASTCALL1_WRAPPER(ExReleaseFastMutexUnsafe) void WINAPI ExReleaseFastMutexUnsafe( FAST_MUTEX *mutex ) { - LONG count; - TRACE("mutex %p.\n", mutex); - count = InterlockedIncrement( &mutex->Count ); - if (count < 1) + mutex->Owner = NULL; + + if (InterlockedIncrement(&mutex->Count) < 1) KeSetEvent( &mutex->Event, IO_NO_INCREMENT, FALSE ); } -- 2.20.1