[PATCH v2 09/10] ntoskrnl.exe: Improve unsafe fast-mutex functions.

Zebediah Figura z.figura12 at gmail.com
Tue Apr 9 18:43:55 CDT 2019


On 04/09/2019 02:29 PM, Derek Lesho wrote:
> Signed-off-by: Derek Lesho <dereklesho52 at Gmail.com>
> ---
>  dlls/ntoskrnl.exe/sync.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c
> index 3085543727..bb2d318e56 100644
> --- a/dlls/ntoskrnl.exe/sync.c
> +++ b/dlls/ntoskrnl.exe/sync.c
> @@ -668,13 +668,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();
>  }
>  
>  /***********************************************************************
> @@ -683,11 +682,10 @@ 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 );
>  }
> 

This could do with a more descriptive title, like "ntoskrnl.exe: Set
Owner in fast mutex functions."

You probably also want to make the corresponding change to
ExTryToAcquireFastMutex() in hal.



More information about the wine-devel mailing list