ntoskrnl.exe: Implement APC-level fast mutex functions.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Zebediah Figura 2019-01-29 22:01:45 -06:00 committed by Alexandre Julliard
parent ad1f270430
commit e3856fd630
2 changed files with 38 additions and 28 deletions

View File

@ -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.@)
*/

View File

@ -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 );
}