Commit: bbe7183cd39de1417f27d2558bb717dd1aa1081d Author: Campbell Barton Date: Fri Jan 13 17:48:50 2023 +1100 Branches: master https://developer.blender.org/rBbbe7183cd39de1417f27d2558bb717dd1aa1081d
GHOST/Wayland: fix threaded event handling The previous fix from T100855 [0] no longer works on my system (3.4.1 release also fails for GNOME/KDE/WLROOTS compositors). Resolve by removing the loop from the wait-on-file handle check. Also reduce locking/unlocking calls. [0]: 37b256e26feb454d9febd84dac1b1ce8b8d84d90 =================================================================== M intern/ghost/intern/GHOST_SystemWayland.cpp =================================================================== diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp index d823db2afd7..ef8ccd66685 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.cpp +++ b/intern/ghost/intern/GHOST_SystemWayland.cpp @@ -1669,24 +1669,24 @@ static int ghost_wl_display_event_pump_from_thread(struct wl_display *wl_display else { wl_display_cancel_read(wl_display); } + + server_mutex->unlock(); } else { - int state; - do { - server_mutex->unlock(); - /* Wait for input (unlocked, so as not to block other threads). */ - state = file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, INT32_MAX); + server_mutex->unlock(); + + /* Wait for input (unlocked, so as not to block other threads). */ + int state = file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, INT32_MAX); + /* Re-check `state` with a lock held, needed to avoid holding the lock. */ + if (state > 0) { server_mutex->lock(); - /* Re-check `state` with a lock held, needed to avoid holding the lock. */ + state = file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, 0); if (state > 0) { - state = file_descriptor_is_io_ready(fd, GWL_IOR_READ | GWL_IOR_NO_RETRY, 0); - if (state > 0) { - err = wl_display_dispatch_pending(wl_display); - } + err = wl_display_dispatch_pending(wl_display); } - } while (state > 0); + server_mutex->unlock(); + } } - server_mutex->unlock(); return err; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs