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