Alexandros Frantzis (@afrantzis) commented about dlls/winewayland.drv/wayland_pointer.c:
process_wayland.zwp_relative_pointer_manager_v1, pointer->wl_pointer); zwp_relative_pointer_v1_add_listener(pointer->zwp_relative_pointer_v1, - &relative_pointer_v1_listener, NULL); + &relative_pointer_v1_listener, pointer); TRACE("Enabling relative motion\n"); } else if (!needs_relative && pointer->zwp_relative_pointer_v1) { + pthread_mutex_lock(&pointer->mutex);
The whole `wayland_pointer_update_constraint` function is always called with the pointer mutex locked, so this lock is not necessary. In fact this second lock attempt causes a deadlock since we are not using a reentrant mutex. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7806#note_101281