This is how I interpert the spy++ log taken on windows 10 while capturing the game ISLAND. I can see that `0014041A` refers to a window called `ActiveMovie Window VideoRenderer` This almost certainly is the directshow/quartz, and we can see it sends and recieves a WM_SHOWWINDOW, like I see in my wine logs. Further we have the parent window `00170F76` named `CS_VideoWidnow` in spy++ and in wine. This window Posts a WM_PAINT, which most likely was forwarded from NotifyOwnerMessage, as that is what we see in wine. It looks to be trying to forward a WM_PAINT to its parent window, but doesn't have the lock as put_Visible hasn't returned. Later we see a WM_ERASEBKGND get sent to the parent window `00170F76`. Same happens in wine it tries to do send_inter_thread_message, but this is wher it stop. Because WM_PAINT hasn't gone through as it is waiting on the lock. Since windows doesn't stop when the WM_ERASEBKGND is sent and I see a WM_PAINT got posted, then I must conclude that VideoWindow_put_Visible must not be holding the lock while doing the ShowWindow on the windows side. As the windows im plementation of ShowWindow is most likely not finished before `WM_WINDOWPOSCHANGED`.
But you also has the possiblity of some of these actions being async or WM_ERASEBKGND is sent with send_notify_message? Or the entire ShowWindow is instead ShowWindowAsync. Both of which I think is probally wrong.
If there are any questions feel free to ask.