protonscr

[Regression][Proton 11] Unmapped ENOENT socket errors in wineserver (sock_get_ntstatus) cause severe thread hangs and frame stuttering

protonopen
ValveSoftware/Proton#10007 · opened 2026-07-25 by Neon095 · updated 2026-07-25 · 1 comments · github
NNeon095 2026-07-25 github

System Information

OS: Arch Linux / CachyOS
GPU: AMD Radeon RX 6500 XT
CPU: AMD Ryzen 5 7600X
Kernel: Linux with NTSync enabled
Proton version: Proton 11 / proton-cachyos-native
Compositor: Gamescope

Issue Description

Proton 11 introduced a regression regarding Unix domain socket error handling in wineserver. When a game or embedded module (e.g., Discord Rich Presence in AAA games or Geometry Dash mods) polls for local Unix sockets that do not exist (such as /run/user/1000/discord-ipc-0), Linux returns ENOENT (No such file or directory).

In wineserver (server/sock.c), sock_get_ntstatus() fails to map this ENOENT error to a valid NTSTATUS code, outputting:
wineserver: sock_get_ntstatus() can't map error: No such file or directory

Because the application iterates over ~40 fallback socket paths (discord-ipc-0 through 9, Snap paths, Flatpak paths, Canary paths), wineserver blocks/stalls the thread while failing to map each error. Under Gamescope, this thread stall starves the presentation queue, resulting in duplicate frame warnings (xwm: got the same buffer committed twice, ignoring) and severe micro-stuttering/lag spikes.

Note: On Proton 9 / GE-Proton 9, this socket failure is handled silently without blocking the rendering thread.
Steps to Reproduce

Launch a game that polls for Discord RPC (e.g., Geometry Dash, Forza Horizon) with Discord closed.

Run under Proton 11 or proton-cachyos-native inside Gamescope.

Observe periodic 30-second lag spikes corresponding to the socket search loop.

Relevant Logs

Gamescope & Wineserver Output:
Plaintext

[gamescope] [Warn] xwm: got the same buffer committed twice, ignoring.
wineserver: sock_get_ntstatus() can't map error: No such file or directory
[gamescope] [Warn] xwm: got the same buffer committed twice, ignoring.

WINEDEBUG=+winsock Trace showing the 40-socket scan loop stalling:
Plaintext

0184:trace:winsock:connect socket 0x40c, addr { family AF_UNIX, path Z:\run\user\1000\discord-ipc-0 }, len 110
0184:trace:winsock:sock_ioctl handle 0x40c, code 0x12032c, in_buffer 0xdc67e50, in_size 146, out_buffer (nil), out_size 0
wineserver: sock_get_ntstatus() can't map error: No such file or directory
0184:trace:winsock:connect failed, status 0xc0000001.
0184:trace:winsock:connect socket 0x40c, addr { family AF_UNIX, path Z:\run\user\1000\discord-ipc-1 }, len 110
wineserver: sock_get_ntstatus() can't map error: No such file or directory
...
0184:trace:winsock:connect socket 0x40c, addr { family AF_UNIX, path Z:\run\user\1000\app\com.discordapp.DiscordCanary\discord-ipc-9 }, len 110

Expected Behavior

sock_get_ntstatus() in wineserver should cleanly map ENOENT on socket connect() calls to a standard Windows status code (such as STATUS_OBJECT_NAME_NOT_FOUND or STATUS_UNSUCCESSFUL) non-blockingly, avoiding thread hangs and stderr spam.

NNeon095 2026-07-25 github

Basically, when discord is not open, it tries to find it each like 15 seconds creating massive sluttering. Only happens in proton 11,

Launch options

Error codes