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);
} else if (!needs_relative && pointer->zwp_relative_pointer_v1) {&relative_pointer_v1_listener, pointer); TRACE("Enabling relative motion\n");
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.