Zebediah Figura : ntoskrnl.exe: Implement APC-level fast mutex functions.
Module: wine Branch: master Commit: e3856fd630cb631a1164146613b6269b3a351358 URL: https://source.winehq.org/git/wine.git/?a=commit;h=e3856fd630cb631a116414661... Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Tue Jan 29 22:01:45 2019 -0600 ntoskrnl.exe: Implement APC-level fast mutex functions. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.c | 28 ---------------------------- dlls/ntoskrnl.exe/sync.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 9ee7543..25d9eb7 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -727,34 +727,6 @@ done: return status; } - -/*********************************************************************** - * ExAcquireFastMutexUnsafe (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL1_ENTRYPOINT -DEFINE_FASTCALL1_ENTRYPOINT(ExAcquireFastMutexUnsafe) -void WINAPI __regs_ExAcquireFastMutexUnsafe(PFAST_MUTEX FastMutex) -#else -void WINAPI ExAcquireFastMutexUnsafe(PFAST_MUTEX FastMutex) -#endif -{ - FIXME("(%p): stub\n", FastMutex); -} - - -/*********************************************************************** - * ExReleaseFastMutexUnsafe (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL1_ENTRYPOINT -DEFINE_FASTCALL1_ENTRYPOINT(ExReleaseFastMutexUnsafe) -void WINAPI __regs_ExReleaseFastMutexUnsafe(PFAST_MUTEX FastMutex) -#else -void WINAPI ExReleaseFastMutexUnsafe(PFAST_MUTEX FastMutex) -#endif -{ - FIXME("(%p): stub\n", FastMutex); -} - /*********************************************************************** * IoAllocateDriverObjectExtension (NTOSKRNL.EXE.@) */ diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 46ffc581..1ab37d1 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -562,3 +562,41 @@ LIST_ENTRY * WINAPI ExInterlockedRemoveHeadList( LIST_ENTRY *list, KSPIN_LOCK *l return ret; } + +/*********************************************************************** + * ExAcquireFastMutexUnsafe (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL1_ENTRYPOINT +DEFINE_FASTCALL1_ENTRYPOINT(ExAcquireFastMutexUnsafe) +void WINAPI __regs_ExAcquireFastMutexUnsafe( FAST_MUTEX *mutex ) +#else +void WINAPI ExAcquireFastMutexUnsafe( FAST_MUTEX *mutex ) +#endif +{ + LONG count; + + TRACE("mutex %p.\n", mutex); + + count = InterlockedDecrement( &mutex->Count ); + if (count < 0) + KeWaitForSingleObject( &mutex->Event, Executive, KernelMode, FALSE, NULL ); +} + +/*********************************************************************** + * ExReleaseFastMutexUnsafe (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL1_ENTRYPOINT +DEFINE_FASTCALL1_ENTRYPOINT(ExReleaseFastMutexUnsafe) +void WINAPI __regs_ExReleaseFastMutexUnsafe( FAST_MUTEX *mutex ) +#else +void WINAPI ExReleaseFastMutexUnsafe( FAST_MUTEX *mutex ) +#endif +{ + LONG count; + + TRACE("mutex %p.\n", mutex); + + count = InterlockedIncrement( &mutex->Count ); + if (count < 1) + KeSetEvent( &mutex->Event, IO_NO_INCREMENT, FALSE ); +}
participants (1)
-
Alexandre Julliard