After an X11 event handler queues messages to another thread, TRUE should be returned and eventually
propagated to X11DRV_ProcessEvents().
When FALSE is always returned in xrandr14_device_change_handler(), a possible hang can happen for
the desktop message queue as follows:
1. The explorer.exe calls GetMessageW() -> NtUserGetMessage() -> wait_objects() -> wait_message().
2. In wait_message(), user_driver->pProcessEvents() gets called in the desktop window thread to
handle RRNotify events and calls xrandr14_device_change_handler() -> display_mode_changed(FALSE)
-> send_message(get_desktop_window(), WM_DISPLAYCHANGE, ...) -> desktop_window_proc() ->
send_message_timeout() -> send_client_message() -> process_message() -> broadcast_message() ->
send_message_timeout() -> send_client_message() -> process_message() -> send_inter_thread_message()
-> wait_message_reply() -> a server set_queue_mask() with skip_wait being 1 -> wake_mask and
changed_mask are set to 0.
3. In wait_message(), user_driver->pProcessEvents() returns FALSE from xrandr14_device_change_handler().
So wait_message() continues to call NtWaitForMultipleObjects().
4. Now NtWaitForMultipleObjects() hangs for INFINITE timeout because wake_mask and changed_mask
for the message queue are set to 0 so the thread is not woke up.
The hang is sensitive to message ordering and only happens in this specific case so it's hard to
reproduce with tests. I believe some of the past test timeouts on TestBots can be attributed to this
bug.
--
v2: winex11.drv: Fix a possible desktop window message queue hang.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5890
Performance issues can occur when a video output sample has a 2D buffer,
because winegstreamer currently outputs only to a linear buffer, which
must then be copied into the 2D buffer. Worse, a linear lock of the 2D
buffer requires the current contents to be copied to a linear buffer,
even when we intend to overwrite it, because MF linear buffers do not
support write-only locking.
--
v4: mf/tests: Test H.264 sink media type height alignment.
winegstreamer: Support 2D sample buffer.
mf: Test color convert 2D buffers.
mf: Test WMV decoder 2D buffers.
mf: Test H.264 decoder 2D buffers.
mf: Test sample copier 2D buffers.
mfplat/tests: Test NV12 negative stride in MFCreateMediaBufferFromMediaType().
mf/tests: Remove todo for an H.264 decoder test.
mf/tests: Stop checking samples at the end of the expected array.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8812
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57343
This is what the Java JRE installer does:
- It calls MsiInstallProductW - this opens the msi read/write
- The msi runs installer.exe
- installer.exe tries to open the msi readonly
--
v2: msi: Make MsiInstallProductW open msi readonly
msi/tests: Add test for MsiOpenDatabaseA during MsiInstallProductA
https://gitlab.winehq.org/wine/wine/-/merge_requests/6760
This should allow the CI to fully pass on this merge request.
If it does, master branch could have CI tests enabled to ensure
any actual broken test caused by a merge request is visible just
by the CI status, and master can also reflect the passing status.
Signed-off-by: Damien Zammit <damien(a)zamaudio.com>
--
v2: test-linux32: Disable broken tests that are already released broken
https://gitlab.winehq.org/wine/wine/-/merge_requests/7410
There exist clients that disable hardware cursors, and instead draw a
software cursor during their renderloop. Such clients incorrectly cause
winewayland to enable relative pointer motion because winewayland thinks
the cursor is not visible, when it is in fact visible and just drawn by
the client instead.
Enabling relative pointer motion breaks compositors that simulate
wl_pointer from tablet tool motion. sway is one such compositor that
supports sending wl_pointer events for clients that don't understand
tablet-v2.
Fix this by not discarding absolute motion events even in the case that
relative pointer motion is active. When relative pointer was
implemented, winewayland didn't support SetCursorPos and accepting
absolute motion events would break mouselook in 3D games. However, now
it does support SetCursorPos so there should be no harm in accepting
absolute motion events as well.
This allows tablet devices to work with winewayland running badly
behaved clients that do software rendering of cursors on compositors
that do simulate wl_pointer from tablet motion, despite winewayland not
supporting tablet-v2 yet.
Signed-off-by: Gopal Prasad <llyyr.public(a)gmail.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9068