From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/coreaudio.c | 20 +++++++++++++++++++- dlls/winecoreaudio.drv/mmdevdrv.c | 1 + dlls/winecoreaudio.drv/unixlib.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c index cd05b1d5ab1..abc8713b9ec 100644 --- a/dlls/winecoreaudio.drv/coreaudio.c +++ b/dlls/winecoreaudio.drv/coreaudio.c @@ -1725,6 +1725,24 @@ static NTSTATUS unix_wow64_create_stream(void *args) return STATUS_SUCCESS; }
+static NTSTATUS unix_wow64_release_stream(void *args) +{ + struct + { + stream_handle stream; + PTR32 timer_thread; + HRESULT result; + } *params32 = args; + struct release_stream_params params = + { + .stream = params32->stream, + .timer_thread = ULongToHandle(params32->timer_thread) + }; + unix_release_stream(¶ms); + params32->result = params.result; + return STATUS_SUCCESS; +} + static NTSTATUS unix_wow64_get_render_buffer(void *args) { struct @@ -1954,7 +1972,7 @@ unixlib_entry_t __wine_unix_call_wow64_funcs[] = { unix_wow64_get_endpoint_ids, unix_wow64_create_stream, - unix_release_stream, + unix_wow64_release_stream, unix_start, unix_stop, unix_reset, diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index c1e955712ca..8bbeb3b8fe4 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -536,6 +536,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface) } if(This->stream){ params.stream = This->stream; + params.timer_thread = NULL; UNIX_CALL(release_stream, ¶ms); } if(This->session){ diff --git a/dlls/winecoreaudio.drv/unixlib.h b/dlls/winecoreaudio.drv/unixlib.h index de2617d8dd4..55ff88b37ae 100644 --- a/dlls/winecoreaudio.drv/unixlib.h +++ b/dlls/winecoreaudio.drv/unixlib.h @@ -55,6 +55,7 @@ struct create_stream_params struct release_stream_params { stream_handle stream; + HANDLE timer_thread; HRESULT result; };