From 1b3121c2ed0d02c4f516c760a3e701321a2f8f4e Mon Sep 17 00:00:00 2001
From: Gijs Vermeulen <gijsvrm@gmail.com>
Date: Wed, 29 Jul 2020 14:44:00 +0200
Subject: [PATCH] amstream: Increase IAudioData refcount in
 IAudioMediaStream::CreateSample().

Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
 dlls/amstream/audiostream.c    | 2 ++
 dlls/amstream/tests/amstream.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/dlls/amstream/audiostream.c b/dlls/amstream/audiostream.c
index e888caaa989..85613f4f0e2 100644
--- a/dlls/amstream/audiostream.c
+++ b/dlls/amstream/audiostream.c
@@ -202,6 +202,7 @@ static ULONG WINAPI IAudioStreamSampleImpl_Release(IAudioStreamSample *iface)
     if (!ref)
     {
         IAMMediaStream_Release(&This->parent->IAMMediaStream_iface);
+        IAudioData_Release(This->audio_data);
         CloseHandle(This->update_event);
         HeapFree(GetProcessHeap(), 0, This);
     }
@@ -378,6 +379,7 @@ static HRESULT audiostreamsample_create(struct audio_stream *parent, IAudioData
     object->parent = parent;
     IAMMediaStream_AddRef(&parent->IAMMediaStream_iface);
     object->audio_data = audio_data;
+    IAudioData_AddRef(audio_data);
     object->update_event = CreateEventW(NULL, FALSE, FALSE, NULL);
 
     *audio_stream_sample = &object->IAudioStreamSample_iface;
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
index e9e9a6d8250..6631fd312a9 100644
--- a/dlls/amstream/tests/amstream.c
+++ b/dlls/amstream/tests/amstream.c
@@ -1507,9 +1507,11 @@ static void test_media_streams(void)
             ok(hr == E_POINTER, "IAudioMediaStream_CreateSample returned: %x\n", hr);
 
             EXPECT_REF(audio_stream, 3);
+            EXPECT_REF(audio_data, 1);
             hr = IAudioMediaStream_CreateSample(audio_media_stream, audio_data, 0, &audio_sample);
             ok(hr == S_OK, "IAudioMediaStream_CreateSample returned: %x\n", hr);
             EXPECT_REF(audio_stream, 4);
+            EXPECT_REF(audio_data, 2);
 
             hr = IAudioMediaStream_GetMultiMediaStream(audio_media_stream, NULL);
             ok(hr == E_POINTER, "Expected E_POINTER, got %x\n", hr);
-- 
GitLab