Alexandre Julliard : winepulse.drv: Convert the Unix call initialization to NtQueryVirtualMemory().

Alexandre Julliard julliard at winehq.org
Tue Aug 10 16:24:08 CDT 2021


Module: wine
Branch: master
Commit: 4303e753137d0b44cff4f9261d10ef86d57016f2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4303e753137d0b44cff4f9261d10ef86d57016f2

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Aug 10 18:02:39 2021 +0200

winepulse.drv: Convert the Unix call initialization to NtQueryVirtualMemory().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winepulse.drv/mmdevdrv.c |  9 ++++---
 dlls/winepulse.drv/pulse.c    | 59 +++++++++++++++++++++----------------------
 dlls/winepulse.drv/unixlib.h  |  2 ++
 3 files changed, 37 insertions(+), 33 deletions(-)

diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 67a42de97f9..ab4cccd7242 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -47,7 +47,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(pulse);
 
-static UINT64 pulse_handle;
+static unixlib_handle_t pulse_handle;
 
 #define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
 
@@ -82,10 +82,13 @@ BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, void *reserved)
 {
     if (reason == DLL_PROCESS_ATTACH) {
         DisableThreadLibraryCalls(dll);
-        if (__wine_init_unix_lib(dll, reason, NULL, &pulse_handle))
+        if (NtQueryVirtualMemory( GetCurrentProcess(), dll, MemoryWineUnixFuncs,
+                                  &pulse_handle, sizeof(pulse_handle), NULL ))
+            return FALSE;
+        if (__wine_unix_call(pulse_handle, process_attach, NULL))
             return FALSE;
     } else if (reason == DLL_PROCESS_DETACH) {
-        __wine_init_unix_lib(dll, reason, NULL, NULL);
+        __wine_unix_call(pulse_handle, process_detach, NULL);
         if (pulse_thread) {
             WaitForSingleObject(pulse_thread, INFINITE);
             CloseHandle(pulse_thread);
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 55579ecda80..2e6ad4848eb 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -178,6 +178,32 @@ static int pulse_poll_func(struct pollfd *ufds, unsigned long nfds, int timeout,
     return r;
 }
 
+static NTSTATUS pulse_process_attach(void *args)
+{
+    pthread_mutexattr_t attr;
+
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT);
+
+    if (pthread_mutex_init(&pulse_mutex, &attr) != 0)
+        pthread_mutex_init(&pulse_mutex, NULL);
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_process_detach(void *args)
+{
+    if (pulse_ctx)
+    {
+        pa_context_disconnect(pulse_ctx);
+        pa_context_unref(pulse_ctx);
+    }
+    if (pulse_ml)
+        pa_mainloop_quit(pulse_ml, 0);
+
+    return STATUS_SUCCESS;
+}
+
 static NTSTATUS pulse_main_loop(void *args)
 {
     struct main_loop_params *params = args;
@@ -1929,8 +1955,10 @@ static NTSTATUS pulse_is_started(void *args)
     return STATUS_SUCCESS;
 }
 
-static const unixlib_entry_t unix_funcs[] =
+const unixlib_entry_t __wine_unix_call_funcs[] =
 {
+    pulse_process_attach,
+    pulse_process_detach,
     pulse_main_loop,
     pulse_create_stream,
     pulse_release_stream,
@@ -1953,32 +1981,3 @@ static const unixlib_entry_t unix_funcs[] =
     pulse_test_connect,
     pulse_is_started,
 };
-
-NTSTATUS CDECL __wine_init_unix_lib(HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out)
-{
-    pthread_mutexattr_t attr;
-
-    switch (reason)
-    {
-    case DLL_PROCESS_ATTACH:
-        pthread_mutexattr_init(&attr);
-        pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT);
-
-        if (pthread_mutex_init(&pulse_mutex, &attr) != 0)
-            pthread_mutex_init(&pulse_mutex, NULL);
-
-        *(UINT64 *)ptr_out = (UINT_PTR)&unix_funcs;
-        break;
-    case DLL_PROCESS_DETACH:
-        if (pulse_ctx)
-        {
-            pa_context_disconnect(pulse_ctx);
-            pa_context_unref(pulse_ctx);
-        }
-        if (pulse_ml)
-            pa_mainloop_quit(pulse_ml, 0);
-
-    }
-
-    return STATUS_SUCCESS;
-}
diff --git a/dlls/winepulse.drv/unixlib.h b/dlls/winepulse.drv/unixlib.h
index 9e7af57b716..98639e7705f 100644
--- a/dlls/winepulse.drv/unixlib.h
+++ b/dlls/winepulse.drv/unixlib.h
@@ -187,6 +187,8 @@ struct is_started_params
 
 enum unix_funcs
 {
+    process_attach,
+    process_detach,
     main_loop,
     create_stream,
     release_stream,




More information about the wine-cvs mailing list