From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/client.c | 12 ++++++++++++ dlls/winepulse.drv/mmdevdrv.c | 16 +++++----------- 2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index a0a2b225c0b..5d807776ff0 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -177,6 +177,18 @@ static DWORD CALLBACK timer_loop_func(void *user) return 0; }
+HRESULT stream_release(stream_handle stream, HANDLE timer_thread) +{ + struct release_stream_params params; + + params.stream = stream; + params.timer_thread = timer_thread; + + WINE_UNIX_CALL(release_stream, ¶ms); + + return params.result; +} + static BOOL query_productname(void *data, LANGANDCODEPAGE *lang, LPVOID *buffer, UINT *len) { WCHAR pn[37]; diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 6221856481d..4efc75dc5a5 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -133,6 +133,8 @@ extern HRESULT main_loop_start(void) DECLSPEC_HIDDEN; extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
+extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread); + extern WCHAR *get_application_name(void);
static inline ACImpl *impl_from_IAudioClient3(IAudioClient3 *iface) @@ -147,14 +149,6 @@ static void pulse_call(enum unix_funcs code, void *params) assert(!status); }
-static void pulse_release_stream(stream_handle stream, HANDLE timer) -{ - struct release_stream_params params; - params.stream = stream; - params.timer_thread = timer; - pulse_call(release_stream, ¶ms); -} - static void set_stream_volumes(ACImpl *This) { struct set_volumes_params params; @@ -444,7 +438,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface) TRACE("(%p) Refcount now %lu\n", This, ref); if (!ref) { if (This->stream) { - pulse_release_stream(This->stream, This->timer_thread); + stream_release(This->stream, This->timer_thread); This->stream = 0; sessions_lock(); list_remove(&This->entry); @@ -639,7 +633,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
if (!(This->vols = malloc(channel_count * sizeof(*This->vols)))) { - pulse_release_stream(stream, NULL); + stream_release(stream, NULL); sessions_unlock(); return E_OUTOFMEMORY; } @@ -652,7 +646,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, free(This->vols); This->vols = NULL; sessions_unlock(); - pulse_release_stream(stream, NULL); + stream_release(stream, NULL); return E_OUTOFMEMORY; }
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 916e04ff047..d8596c9371c 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -81,6 +81,8 @@ extern HRESULT main_loop_start(void) DECLSPEC_HIDDEN; extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
+extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread); + extern WCHAR *get_application_name(void);
void DECLSPEC_HIDDEN sessions_lock(void) @@ -127,18 +129,6 @@ BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, void *reserved) return TRUE; }
-static HRESULT alsa_stream_release(stream_handle stream, HANDLE timer_thread) -{ - struct release_stream_params params; - - params.stream = stream; - params.timer_thread = timer_thread; - - ALSA_CALL(release_stream, ¶ms); - - return params.result; -} - static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name, GUID *guid) { @@ -443,7 +433,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface) } HeapFree(GetProcessHeap(), 0, This->vols); if (This->stream) - alsa_stream_release(This->stream, This->timer_thread); + stream_release(This->stream, This->timer_thread); HeapFree(GetProcessHeap(), 0, This); } return ref; @@ -648,7 +638,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
exit: if(FAILED(params.result)){ - alsa_stream_release(stream, NULL); + stream_release(stream, NULL); HeapFree(GetProcessHeap(), 0, This->vols); This->vols = NULL; }else{
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 93a9b4422f2..cc4ff6133ab 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -75,6 +75,8 @@ extern HRESULT main_loop_start(void) DECLSPEC_HIDDEN; extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
+extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread); + extern WCHAR *get_application_name(void);
void DECLSPEC_HIDDEN sessions_lock(void) @@ -417,10 +419,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface) TRACE("(%p) Refcount now %lu\n", This, ref); if(!ref){ if(This->stream){ - struct release_stream_params params; - params.stream = This->stream; - params.timer_thread = This->timer_thread; - UNIX_CALL(release_stream, ¶ms); + stream_release(This->stream, This->timer_thread); This->stream = 0;
sessions_lock();
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index c1d9cc6d1a9..950b711bad0 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -87,6 +87,8 @@ extern HRESULT main_loop_start(void) DECLSPEC_HIDDEN; extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
+extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread); + extern WCHAR *get_application_name(void);
void DECLSPEC_HIDDEN sessions_lock(void) @@ -141,17 +143,6 @@ BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, void *reserved) return TRUE; }
-static HRESULT stream_release(stream_handle stream, HANDLE timer_thread) -{ - struct release_stream_params params; - - params.stream = stream; - params.timer_thread = timer_thread; - OSS_CALL(release_stream, ¶ms); - - return params.result; -} - static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name, GUID *guid) {
Huw Davies (@huw) commented about dlls/winecoreaudio.drv/mmdevdrv.c:
TRACE("(%p) Refcount now %lu\n", This, ref); if(!ref){ if(This->stream){
struct release_stream_params params;
params.stream = This->stream;
params.timer_thread = This->timer_thread;
UNIX_CALL(release_stream, ¶ms);
stream_release(This->stream, This->timer_thread); This->stream = 0;
There's also an instance of the `release_stream` call in `AudioClient_Initialize()`.