Skip to content

XWM clipboard transfer loop causes 100% CPU on one core #12516

@janfeddersen-wq

Description

@janfeddersen-wq

Hyprland's XWM module gets stuck in an infinite loop spamming [ERR] [xwm] No transfer with property data found, causing the
main Hyprland thread to consume 100% of one CPU core indefinitely.

The issue persists even after killing XWayland (kill -9 ), indicating the bug is in Hyprland's internal XWM state machine
rather than in XWayland itself. Only a full Hyprland restart resolves it.

How to reproduce

Unknown exact trigger. Occurred after normal usage with clipboard operations involving X11/XWayland applications. Using
cliphist + wl-paste for clipboard management.

Crash reports, logs, images, videos

Rolling log showing the spam:
[ERR] [xwm] No transfer with property data found
[ERR] [xwm] No transfer with property data found
[ERR] [xwm] No transfer with property data found
... (repeats indefinitely)

strace showing tight syscall loop (5 second sample):
% time seconds usecs/call calls errors syscall


24.24 0.119407 1 88039 85477 sendmsg
23.01 0.113379 1 88074 epoll_ctl
22.18 0.109266 1 85477 epoll_wait
15.92 0.078414 4 18510 ioctl
4.38 0.021569 1 17321 close
...
100.00 0.492654 1 333063 86826 total

Note: 85,477 sendmsg errors in 5 seconds - 97% failure rate, indicating a stuck retry loop.

Key observations:

  • Main Hyprland thread (not a child thread) is at 100% CPU
  • Killing XWayland does NOT stop the loop
  • Clearing Wayland clipboard (wl-copy --clear) does NOT help
  • No XWayland clients were running at the time of investigation

System Info

Hyprland 0.52.1 built from branch v0.52.1 at commit 967c3c7
Tag: v0.52.1

System: CachyOS Linux
Kernel: 6.17.9-2-cachyos

GPU: 3x NVIDIA RTX 3090
Driver: NVIDIA 580.105.08 (Open Kernel Module)

Monitors: 4x 2560x1440 (60Hz, 144Hz, 240Hz, 240Hz)

Libraries:

  • Hyprgraphics: 0.4.0
  • Hyprutils: 0.10.4
  • Hyprcursor: 0.1.13
  • Hyprlang: 0.6.6
  • Aquamarine: 0.10.0

Suggested fix area

The XWM clipboard transfer handling in src/xwayland/ likely needs:

  1. A retry limit or backoff for failed transfers
  2. Proper cleanup when the transfer source is no longer valid
  3. State reset when XWayland is killed/restarted

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions