From: Conor McCarthy <cmccarthy@codeweavers.com> When extension support is added, if an extension doesn't use an async work item in BeginCreateObject() and instead invokes the callback from the current thread, it breaks ordering of FLAGS_ENGINE_SOURCE_PENDING set/clear because the critical section in our Invoke() function won't block. --- dlls/mfmediaengine/main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index fc04cdbd567..213592b1d80 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -1735,6 +1735,9 @@ static HRESULT media_engine_set_source(struct media_engine *engine, IMFByteStrea if (url || bytestream) { + if (SUCCEEDED(hr)) + media_engine_set_flag(engine, FLAGS_ENGINE_SOURCE_PENDING, TRUE); + if (engine->extension) FIXME("Use extension to load from.\n"); @@ -1750,8 +1753,6 @@ static HRESULT media_engine_set_source(struct media_engine *engine, IMFByteStrea else hr = IMFSourceResolver_BeginCreateObjectFromURL(engine->resolver, url, flags, props, NULL, &engine->load_handler, NULL); - if (SUCCEEDED(hr)) - media_engine_set_flag(engine, FLAGS_ENGINE_SOURCE_PENDING, TRUE); if (props) IPropertyStore_Release(props); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10731