Zebediah Figura : ntoskrnl.exe: Implement APC-level fast mutex functions.
Alexandre Julliard
julliard at winehq.org
Wed Jan 30 17:36:16 CST 2019
Module: wine
Branch: master
Commit: e3856fd630cb631a1164146613b6269b3a351358
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e3856fd630cb631a1164146613b6269b3a351358
Author: Zebediah Figura <z.figura12 at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );
+}
More information about the wine-cvs
mailing list