Nikolay Sivov : mfreadwrite: Keep source reference in source reader.
Alexandre Julliard
julliard at winehq.org
Wed Mar 13 18:10:51 CDT 2019
Module: wine
Branch: master
Commit: eca0e8bb4f740983d6cc23438e807b13569f323a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=eca0e8bb4f740983d6cc23438e807b13569f323a
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Mar 13 09:29:34 2019 +0300
mfreadwrite: Keep source reference in source reader.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfreadwrite/main.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c
index 88903ce..6b6c516 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/main.c
@@ -70,10 +70,11 @@ HRESULT WINAPI DllUnregisterServer(void)
return __wine_unregister_resources( mfinstance );
}
-typedef struct _srcreader
+typedef struct source_reader
{
IMFSourceReader IMFSourceReader_iface;
- LONG ref;
+ LONG refcount;
+ IMFMediaSource *source;
} srcreader;
struct sink_writer
@@ -117,7 +118,7 @@ static HRESULT WINAPI src_reader_QueryInterface(IMFSourceReader *iface, REFIID r
static ULONG WINAPI src_reader_AddRef(IMFSourceReader *iface)
{
srcreader *This = impl_from_IMFSourceReader(iface);
- ULONG ref = InterlockedIncrement(&This->ref);
+ ULONG ref = InterlockedIncrement(&This->refcount);
TRACE("(%p) ref=%u\n", This, ref);
@@ -126,17 +127,18 @@ static ULONG WINAPI src_reader_AddRef(IMFSourceReader *iface)
static ULONG WINAPI src_reader_Release(IMFSourceReader *iface)
{
- srcreader *This = impl_from_IMFSourceReader(iface);
- ULONG ref = InterlockedDecrement(&This->ref);
+ struct source_reader *reader = impl_from_IMFSourceReader(iface);
+ ULONG refcount = InterlockedDecrement(&reader->refcount);
- TRACE("(%p) ref=%u\n", This, ref);
+ TRACE("%p, refcount %d.\n", iface, refcount);
- if (!ref)
+ if (!refcount)
{
- HeapFree(GetProcessHeap(), 0, This);
+ IMFMediaSource_Release(reader->source);
+ heap_free(reader);
}
- return ref;
+ return refcount;
}
static HRESULT WINAPI src_reader_GetStreamSelection(IMFSourceReader *iface, DWORD index, BOOL *selected)
@@ -244,7 +246,9 @@ static HRESULT create_source_reader_from_source(IMFMediaSource *source, IMFAttri
return E_OUTOFMEMORY;
object->IMFSourceReader_iface.lpVtbl = &srcreader_vtbl;
- object->ref = 1;
+ object->refcount = 1;
+ object->source = source;
+ IMFMediaSource_AddRef(object->source);
hr = IMFSourceReader_QueryInterface(&object->IMFSourceReader_iface, riid, out);
IMFSourceReader_Release(&object->IMFSourceReader_iface);
More information about the wine-cvs
mailing list