[PATCH 2/5] ntoskrnl.exe: Implement APC-level fast mutex functions.
Zebediah Figura
z.figura12 at gmail.com
Tue Jan 29 22:01:45 CST 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
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 20bd401489..f2aecd8a56 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -729,34 +729,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 46ffc581f0..1ab37d13f6 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 );
+}
--
2.20.1
More information about the wine-devel
mailing list