From: Christopher Liebich Kolle <cl.kolle(a)stud.uis.no> The IVideoWindow_put_Visible runs the NtUserShowWindow which may trigger the VideoWindow_NotifyOwnerMessage with a WM_PAINT message and afterwards try to send a WM_ERASEBKND. This will cause the VideoWindow_NotifyOwnerMessage to be stuck waiting on the lock. This causes a deadlock because the IVideoWindow_put_Visible is never able to return, as it is waiting for the WM_ERASEBKND message to go through in the send_erase function, which can only go through once the WM_PAINT has returned. --- dlls/quartz/filtergraph.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index 4100e71be3a..488b7716d10 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -4176,11 +4176,12 @@ static HRESULT WINAPI VideoWindow_put_Visible(IVideoWindow *iface, LONG Visible) hr = GetTargetInterface(This, &IID_IVideoWindow, (LPVOID*)&pVideoWindow); + LeaveCriticalSection(&This->cs); + + if (hr == S_OK) hr = IVideoWindow_put_Visible(pVideoWindow, Visible); - LeaveCriticalSection(&This->cs); - return hr; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5023