From: Adrian Thiele adrian.thiele@live.de
--- dlls/mfreadwrite/reader.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index 5296e77f3c3..e21f4e10fa9 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -211,6 +211,8 @@ static ULONG source_reader_release(struct source_reader *reader)
if (!refcount) { + if (reader->device_manager) + IUnknown_Release(reader->device_manager); if (reader->async_callback) IMFSourceReaderCallback_Release(reader->async_callback); if (reader->descriptor)
Derek Lesho (@dlesho) commented about dlls/mfreadwrite/reader.c:
if (!refcount) {
if (reader->device_manager)
IUnknown_Release(reader->device_manager);
This should be IMFDXGIDeviceManager_Release instead of IUnknown_Release.
On Wed Mar 1 12:54:17 2023 +0000, Derek Lesho wrote:
This should be IMFDXGIDeviceManager_Release instead of IUnknown_Release.
Well, looking at the [code where device_manager is assigned](https://gitlab.winehq.org/wine/wine/-/blob/56db5b0bf1aa6df5edbedbec03e0a1db3...), it could also be a IDirect3DDeviceManager9. And device_manager is defined as type IUnknown inside the source_reader struct, so I'm unsure if using `IMFDXGIDeviceManager_Release` would be correct (mingw warns about incompatible pointer type with that).
On Wed Mar 1 13:13:50 2023 +0000, Adrian Thiele wrote:
Well, looking at the [code where device_manager is assigned](https://gitlab.winehq.org/wine/wine/-/blob/56db5b0bf1aa6df5edbedbec03e0a1db3...), it could also be a IDirect3DDeviceManager9. And device_manager is defined as type IUnknown inside the source_reader struct, so I'm unsure if using `IMFDXGIDeviceManager_Release` would be correct (mingw warns about incompatible pointer type with that).
Ah, right, my bad
Please add a refcount test for this, for example in existing test_reader_d3d9(), to demonstrate that manager refcount balanced correctly.