From: Rémi Bernon rbernon@codeweavers.com
Instead of internal ref, otherwise an executing callback might be the one releasing the last ref, and MFUnlockWorkQueue will cancel and then block waiting for the callback itself to finish executing. --- dlls/mfreadwrite/reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index a9d25848e7b..87ed0fe6cfc 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -258,7 +258,6 @@ static ULONG source_reader_release(struct source_reader *reader) } source_reader_release_responses(reader, NULL); free(reader->streams); - MFUnlockWorkQueue(reader->queue); DeleteCriticalSection(&reader->cs); free(reader); } @@ -1666,6 +1665,7 @@ static ULONG WINAPI src_reader_Release(IMFSourceReaderEx *iface) } }
+ MFUnlockWorkQueue(reader->queue); source_reader_release(reader); }