I experience a similar symptom when attempting to play the native linux build of Slay the Spire 2 through Steam on Ubuntu 26.04.1 LTS. If both symptoms have a common cause, it suggests the issue may not be specific to proton.
I have Slay the Spire 2 configured to run in windowed mode. Sometimes after launching the game, the game freezes & stops responding. The issue may be triggered by alt-tab or changing focus by clicking outside & inside the game window.
After the game freezes, the following "Assertion Failed" message is visible in system logs:
steam[$PID]: src/SerializedSurface.cpp (1437) : Assertion Failed: OnChromePaintBufferClientDisconnect m_mapShMemFD has 1 entries, m_mapChromePaintBufferHandleToData 2 entries
What I expected to happen instead: the game & steam overlay functions without the game hanging.
Disabling the steam overlay seems to prevent this issue:
Steam -> Settings -> In Game -> Enable the Steam Overlay while in-game -> Disable
I recently upgraded from Ubuntu 24.04 LTS to Ubuntu 26.04.1 LTS. This issue did not happen with Ubuntu 24 LTS.
Can confirm the steam overlay is the cause. It essentially stops responding, which in turn brings the entire game down.
crystalyne@hortonator:~/.var/app/com.valvesoftware.Steam$ ls -l /proc/129720/fd/513
ss -xlnp | awk '$3>0'
lrwx------. 1 crystalyne crystalyne 64 Oct 9 22:54 /proc/129720/fd/513 -> 'socket:[1741405]'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
u_str LISTEN 11 10 /tmp/steam_chrome_overlay_uid1000_spid5126 1706691 * 0 users:(("gameoverlayui",pid=129822,fd=24))
crystalyne@hortonator:~/.var/app/com.valvesoftware.Steam$
Your system information
Steam client version: branch: Steam Beta Update, version: 1791592380, build date: Sat, Oct 10, 2026 1:12 AM UTC +01:00
Distribution: Fedora Silverblue 44
Opted into Steam client beta?: yes
Have you checked for system updates?: yes
GPU: AMD RX 6900 XT
i tasked my slopbot to find the root cause for this and the first release that introduced this - if anyone cares for it here are the results:
I reproduced the same full-listener-queue hang in native Linux Dota 2 (Vulkan) and investigated it with strace, GDB, and static comparisons of the shipped binaries. I found a candidate change in the October 1 beta that may help narrow this down, but have not established a first-bad build by runtime testing.
gameoverlayrenderer.so → blocking Unix-domain connect() to /tmp/steam_chrome_overlay_uid1000_spid<gamepid>.gameoverlayui helper is alive, owns the listener, and stops accepting connections. Its queue reaches 11 with backlog 10. Its regular frame callback continues running.SerializedSurface.cpp (1437): OnChromePaintBufferClientDisconnect m_mapShMemFD has 1 entries, m_mapChromePaintBufferHandleToData 0 entries.
CSerializedSurface’s regular frame callback drained the queue to zero. Repeated rapid Alt-Tab, opening/closing the overlay, and spectating subsequently stopped reproducing the freeze. This is an experimental workaround, not a proposed production patch; it changes timing. No installed Steam files were changed by the hook.My reproductions involved Alt-Tab between Dota and another application, including Steam or a terminal; moving the game between workspaces was not required.
I downloaded both complete bins_ubuntu12 archives from Valve’s CDN and verified their SHA-256 hashes against the archived manifests:
| Build | Manifest | Role in comparison |
|---|---|---|
1790721607 |
d0fa08908341 | Immediately preceding beta; not runtime-confirmed good |
1790904859 |
3dd6737b71ea | October 1 beta; also the affected build in the original report |
In the 64-bit gameoverlayrenderer.so, the latter build adds a block to the CBaseOverlayRenderer destructors. Approximate pseudocode inferred from disassembly; global/mutex names are placeholders:
lock(mutex);
if (active_renderer == this) {
existing_connection_teardown(this);
active_renderer = nullptr;
}
unlock(mutex);
// Continue pre-existing member/socket destruction.
The teardown routine sends IPC message 0x19 when the connection is valid and the IPC sender is available, closes socket member this + 0x154, and resets it to -1. The predecessor already closed that socket in the destructor, but did not call this disconnect-notification routine from that destruction path.
The static call chain is:
VulkanSteamOverlayDestroySwapChain
→ erase the swapchain's renderer from the map
→ CVulkanRenderer destructor
→ CBaseOverlayRenderer destructor
→ newly added conditional connection teardown / IPC 0x19
Useful ELF virtual addresses (before ASLR), for the two archived 64-bit renderer libraries:
| Routine | 1790721607 | 1790904859 |
|---|---|---|
VulkanSteamOverlayDestroySwapChain |
0x5dd90 |
0x5df90 |
| Map erasure reaching renderer destruction | 0x5d990 |
0x5db90 |
CVulkanRenderer destructor variants |
0x5c980, 0x5c990 |
0x5cb80, 0x5cb90 |
| Changed base destructor variants | 0x58be0, 0x58ce0 |
0x58d40, 0x58ea0 |
| Existing connection teardown routine | 0x57770 |
0x57850 |
In 1790904859, the added destructor blocks compare against global pointer 0xcb7f0; calls to teardown occur at 0x58e43 and 0x58f93. Class identities were checked against RTTI. The teardown routine also gains a null check around its IPC sender in this release.
This corresponds in time to the official October 1 beta notes, which mention a fix for Vulkan games recreating their swapchain. That correspondence is a lead, not proof that the advertised fix caused this hang.
In the helper path identified in the current build, accepting a connection is nested inside sending a shared Chrome paint-buffer FD to the game:
shared paint-buffer drawing
→ if buffer is not already marked cached/sent: send its FD
→ if client socket lookup misses: accept a connection
Consequently, drawing an already-cached buffer skips this acceptance path; without that drawing path, it is not reached either. The regular frame callback does not independently service the listener in the inspected code.
With the overlay held open after the recovery hook was installed, a five-second GDB capture counted 357 shared-buffer draw calls and zero descriptor-send calls. The sampled cache entry for handle 0x22 had its cached/sent flag set to 1.
For current Steam build 1791918634, 32-bit vgui2_s.so addresses are: acceptance routine 0x2137b0; FD-send routine 0x215c40 (calls acceptance on socket lookup miss); cache branch 0x218958 skipping toward 0x218dfa; regular frame callback 0x20c020. Dota’s blocking renderer connect() call is at gameoverlayrenderer.so + 0x57a64.
Between the two adjacent beta packages above, vgui2_s.so’s entire .text section differs in only five bytes, all diagnostic immediate arguments apparently representing assertion line numbers. The accept/cache/frame-callback instruction bytes are unchanged. chromehtml.so is byte-identical. gameoverlayui.so also changes and has not been ruled out.
0x19 to the helper diagnosticI also decoded the helper's IPC dispatch jump table, rather than inferring the message meaning from its number:
gameoverlayui.so jump table 0x20c834, entry 0x19, selects handler 0x2bb270. It obtains the overlay surface through virtual slot +0x2a8, then calls its slot +0x58 at 0x2bb288. The two case blocks have identical bytes.1791918634, the equivalent table is 0x20ca34, handler 0x2bb490, virtual call 0x2bb4a8.vgui2_s.so's IOverlaySurface vtable starts at 0x600824. Slot +0x58 points to thunk 0x20c300, which adjusts this by -0x198 and enters 0x20c150: the routine containing the OnChromePaintBufferClientDisconnect diagnostic.Thus there is a concrete static link between the newly added renderer-side notification and the diagnostic observed during the hang. Runtime evidence that the failing Alt-Tab actually takes the new destructor branch is still missing.
The static comparison establishes that the destructor-side disconnect notification was added in this package transition. It does not establish that this is the first release with the hang, or that the new conditional path executes during the failing Alt-Tab transitions. The cache observations were made after recovery and do not establish the initial invalidation failure.
The most useful next checks appear to be:
0x19 and the next connection attempt. This would distinguish the candidate destructor change from other callers of the existing teardown routine.The frame-callback hook only demonstrates the listener-service dependency. It is not a production fix: the existing acceptance routine also performs a blocking accepted-client handshake, so simply moving that whole routine into every frame callback would need additional care.
Based on the recovery experiment, the primary fix appears to be servicing the listener independently of shared-buffer drawing and descriptor-cache misses. The following are proposed changes, not source-level findings:
O_NONBLOCK; that needs to be set explicitly, e.g. with accept4(..., SOCK_NONBLOCK | SOCK_CLOEXEC) (accept(2)).These sketches express the intended invariants, not Valve's API or a drop-in patch. Error handling, protocol validation, FD ownership, and synchronization would need to follow the actual implementation.
// Helper event loop; runs regardless of overlay visibility or texture work.
// The listener itself is nonblocking and registered for level-triggered reads.
on_listener_readable() {
while (accept_budget_remaining() && pending_peer_capacity_available()) {
fd = accept4(listener, SOCK_NONBLOCK | SOCK_CLOEXEC);
if (would_block(fd)) break;
if (interrupted(fd)) continue;
if (failed(fd)) { handle_accept_error(); break; }
watch_pending_peer(fd, handshake_deadline());
}
// If capacity is exhausted, pause readiness notifications and re-arm
// when capacity returns; also expire incomplete handshakes.
}
on_pending_peer_readable(peer) {
result = peer.handshake.read_available_nonblocking();
if (result == incomplete) return; // Preserve partial input; keep deadline.
if (result == eof_or_error || !validate_handshake(peer)) {
close_and_release(peer);
return;
}
register_ready_connection(peer, fresh_connection_id());
}
Buffer delivery should then depend on connection state, without being responsible for accepting that connection:
ensure_buffer_available(peer, buffer) {
key = (buffer.id, buffer.generation);
if (!peer.ready || peer.sent.contains(key) || peer.in_flight.contains(key))
return;
peer.in_flight.insert(key);
queue_nonblocking_fd_delivery(peer.connection_id, buffer, completion);
// Completion removes in_flight and marks sent only at the protocol's
// success point. On failure, do not mark sent; retry or retire the peer.
}
on_connection_closed(connection_id) {
retire_that_connection_and_its_pending_io(connection_id);
// Its sent/in_flight state dies with it. A replacement peer starts empty.
// A late completion/close from the old connection must not mutate the new
// connection's state merely because both identify the same game PID.
}
On the renderer side, connection/FD handshake work would advance asynchronously with deadlines. The render path would consume only ready overlay state and continue rendering the game when that state is unavailable, rather than entering a blocking connect() or descriptor receive.
A useful regression test would repeatedly destroy/recreate Vulkan swapchains for the same game process, with the overlay both hidden and displaying already-cached buffers. Verify that fresh connections are accepted, required FDs are resent to each connection, stale sockets/FDs are released, and rendering continues. A client that connects but delays its handshake should not stall the helper either.
I would not recommend reverting the destructor change solely on this evidence: it may be necessary for the advertised swapchain crash fix. The static comparison identifies a candidate trigger; the listener-starvation failure and the benefit of independent listener servicing are supported by the runtime observations above.
Runtime investigation: Steam 1791918634, native Dota build 25894101, NixOS, GNOME Wayland, private xwayland-satellite 0.8.3, RX 7900 XTX / Mesa 26.2.4.
Disabling Steam web-view GPU acceleration, testing [xwayland-satellite PR #499](https://github.com/Supreeeme/xwayland-satellite/pull/499) (ICCCM focus changes), and suppressing the startup overlay toast did not prevent the hang. No GPU reset or OOM was found. A sampled browser GPU presentation wait was not a persistent GPU stall. These did not explain the reproducible full socket queue or the recovery from servicing it.
1790721607 bins_ubuntu12 archive
ffda075bc03991f565c10298e8756c5c2c76a4c6fdb998c31a81d8ca584e027f
1790904859 bins_ubuntu12 archive
590d35091f87ced96517a69c0ddcf9a13c7b8554a472fa69c669af7ce8a87687
1790721607 ubuntu12_64/gameoverlayrenderer.so
ede84aed04c4e52c4e651856c95eb37c7a0892f4607712831d048d47f7d373c0
1790904859 ubuntu12_64/gameoverlayrenderer.so
e0248c176ad8cb55deb19433fde62f3335abfd179be9dcc637975adbff2616d8
1790721607 ubuntu12_32/vgui2_s.so
e354d4b8f4ffedf5250acdb63bbd50653250b0ea9df7ed2f1fdef8a5d4b656f3
1790904859 ubuntu12_32/vgui2_s.so
84a125ed71ce9cdd4394c299acf5ba6a5e7f8f3628cb526660d09ef1f6d433ce
Got the same:
Summary
Native Linux Dota 2 freezes while the GNOME desktop remains responsive. During a live freeze, GDB showed the Vulkan render thread blocked in connect() inside Steam's gameoverlayrenderer.so, called from VulkanSteamOverlayPresent().
The target socket belonged to the game's gameoverlayui helper. Its listener had a queue of 11 with a backlog of 10. Killing only this helper immediately restored gameplay without restarting Dota or Steam.
This appears to match https://github.com/ValveSoftware/steam-for-linux/issues/13682 and provides another confirmed recovery in native Dota 2 on GNOME Wayland.
7.2.7-1-cachyos51.0-1; Mutter: 51.1-11002:744c, approximately 20 GiB VRAMamdgpu26.2.4-117919186341.0.0.87-3 (native distribution package)steam_client_ubuntu12 manifest570, build ID 25966409Launch options in use:
+@panorama_min_comp_layer_dimension 0 -prewarm_panorama -console -high -novid -noforcemaccel -noforcemspd -useforcedmparms
The exact triggering action is unknown. Alt-Tab or a particular in-game action has not been established as the trigger in this case.
Game PID: 9170; render-thread TID: 9462; overlay-helper PID: 9485.
The render thread remained in this call chain across separate GDB captures:
connect()
gameoverlayrenderer.so
gameoverlayrenderer.so
VulkanSteamOverlayPresent()
vkQueuePresentKHR() [steamoverlayvulkanlayer.so]
librendersystemvulkan.so
The render thread's syscall registers showed orig_rax = 42 (connect), fd 42, and sockaddr length 110. The sockaddr contained the Unix-domain socket path:
/tmp/steam_chrome_overlay_uid1000_spid9170
ss -xlnp showed:
u_str LISTEN 11 10 /tmp/steam_chrome_overlay_uid1000_spid9170 ... users:(("gameoverlayui",pid=9485,fd=24))
The main game thread was waiting in ThreadAtomicWait() in libtier0.so. Kernel logs contained no GPU timeout/reset or OOM-kill around this freeze. Available system RAM was approximately 17 GiB.
SIGTERM to overlay helper PID 9485. It remained alive and the game stayed blocked.SIGKILL to that helper only. Dota PID 9170 was left running.connect() call.No Steam binaries, game files, launch options, or persistent settings were changed during this test. GDB was detached after each capture.
A stalled overlay helper should not indefinitely block the game's render thread. The game should continue rendering, or the overlay connection should fail with a bounded timeout.
Terminating the stuck gameoverlayui helper restored this running game. Disabling the overlay for subsequent Dota launches has been recommended but has not yet been tested in this case.
diagnostic-excerpts.txt contains the relevant render-thread backtraces before recovery and the main/render-thread backtraces after recovery. Home-directory paths have been anonymized.
Hi! I'm a Steam Deck user, and I'm experiencing the same issue described here.
The problem occurs in multiple games when I use Alt+Tab in Desktop Mode. After switching between windows a few times, the game freezes completely: the image stops updating, and the Steam Overlay no longer opens. The desktop itself may remain partially functional, but I cannot interact with the frozen game.
I've tested several games, including Vampire Survivors, GTFO, Deadlock, Dota 2, and Counter-Strike. The issue occurs with different Proton versions and in both windowed and fullscreen modes.
I'm running SteamOS on the Stable update channel. Switching to the Steam Client Beta did not fix the issue, and restarting the system after updating Mesa didn't help either.
However, disabling the Steam Overlay for the affected game completely resolved the issue in my testing. The game no longer freezes after repeated Alt+Tab switching.
My Steam client information:
Hopefully, this information helps narrow down the cause. It seems possible that the issue is related to the Steam Overlay or its interaction with the Desktop Mode graphics stack.
Hi! Got the same issue on Final Fantasy XIV (Fedora 44, GNOME Wayland (mutter 50.x), RX 9070 XT (RADV), Steam stable channel)
I also got this same issue multiple times in only a few minutes when playing Terraria on EndeavourOS (Wayland/MangoWM), the only way to close for me was also force stopping the process. GPU: RX 7600 XT.
System:
Same assert as #13740 (closed as a duplicate of this):
src/SerializedSurface.cpp (1437) : Assertion Failed: OnChromePaintBufferClientDisconnect m_mapShMemFD has 1 entries, m_mapChromePaintBufferHandleToData 0 entries.
Symptom:
The game window hangs completely after a short time (often on alt-tab or workspace switch; one freeze ~2 minutes after launch). Only fix is killing the process. While a game runs, gameoverlayui enters a crash/restart loop: repeated breakpad init + "reaping pid: ... -- gameoverlayui" every ~10 s, and minidumps are written to /tmp/dumps (auto-uploaded). The Steam console log also shows from gameoverlayui:
../common/pipes.cpp (900) : Fatal assert; application exiting
Regression boundary (in case it helps bisect):
Workaround confirms it's the overlay:
Disabling "Enable the Steam Overlay while in-game" globally (Steam → Settings → In Game) fully fixes it: 20+ minutes of alt-tab and workspace switching, no freeze, zero new assertions. With the overlay enabled the freeze reproduces every session.
Happy to attach Steam logs or minidumps if useful.
I also have problems with Dota2, game freezes out of nowhere. I am on arch with wayland. After removing the overlay everything runs normal.
I can reproduce since the Oct 13 stable client update playing Valheim (892970) via Proton on Fedora 44, GNOME Wayland 50.5, RX 9060 XT (amdgpu), kernel 7.2.10 / Mesa 26.2.4. Game still alive but frozen after Alt-Tab, only killing the process helps. My first failure came 63 minutes after the client self-update. Disabling the overlay fixes it.
Thanks for the detailed report. The latest steam beta should have a fix for this issue, can you update to the latest beta client and check if it is fixed on your side?
Not OP but issue seems to be fixed for me on beta.
EDIT:
Steam Beta Branch: Steam Beta Update
Steam Version: 1792192922
Steam Client Build Date: Fri, Oct 16, 2026 5:56 PM UTC -04:00
Linux Kernel: 7.2.9
CPU: AMD Ryzen 5700x
GPU: AMD 9060 XT
I can't reproduce on Proton or Native Linux builds (Tested Valheim, Project Zomboid and Slay the Spire 1 natively).
Updating to the latest steam beta client (1792192922) did not resolve this issue for me
impacted game : slay the spire 2 (native linux build)
when started in window mode, game hangs with black screen. symptom of failed assertion message no longer visible in system log.
as before, disabling steam overlay works around the issue & game can open normally.
Steam Beta Branch: Steam Beta Update
Steam Version: 1792192922
Steam Client Build Date: Sat, Oct 17, 2026 8:56 AM UTC +11:00
Distribution: Ubuntu 26.04.1 LTS
Opted into Steam client beta?: yes
Have you checked for system updates?: yes
GPU: AMD Ryzen 5 5600
latest steam beta client still has issues for me, in particular it doesnt let me switch from terraria to another column on a niri workspace, and when the game is fullscreen and i try switching workspace, it un-fullscreens. i can get around it not letting me switch to another column by not making the window be full screen width. persists even without overlay so idk if this is the right place to post this even but im not sure where else i would. it atleast doesnt crash on the beta version it seems
OP here, the issue is in fact fixed for me in the latest beta update; Considering some other users are still having problems with it should I leave this issue open or close it?
Thanks for checking everyone.
Well will close this issue as the bug described by OP is fixed. For those of you still experiencing problems, please open a new issue and please include your steam logs as specified by the issue template.
I updated to steam beta - and steam won't launch anymore - BPM just crashes.
Nvm, just had to re-open steam a few times.
proton experimentalx1 2026-10PROTON_ENABLE_WAYLAND=1x1 2026-10
Steam overlay helper (gameoverlayui) stops accepting connections; Proton games freeze permanently on alt-tab (KDE Plasma Wayland)
##Disclaimer
This diagnosis has been made with llms, I do have the issue and all the steps were executed entirely by me, the report has been written by the llm too, llm is Sonnet5.5 medium.
Summary
With the Steam overlay enabled, alt-tabbing out of a game freezes it permanently. The game's
dxvk-submitthread is blocked inconnect()on/tmp/steam_chrome_overlay_uid1000_spid<gamepid>, a socket owned by that game'sgameoverlayuihelper. The helper is still alive and listening but no longer accepts connections (queue full), so the game's render path never recovers. Disabling the overlay per game avoids the freeze.Affected games
Warframe (230410), Deadlock (1422450), Risk of Rain 2 (632360), all via Proton. Tried: Proton Experimental, Hotfix, and several GE-Proton versions. Same result on all.
System
Manufacturer: Micro-Star International Co., Ltd.
Model: B650 GAMING PLUS WIFI (MS-7E26)
Form Factor: Desktop
No Touch Input Detected
Processor Information:
CPU Vendor: AuthenticAMD
CPU Brand: AMD Ryzen 5 7600 6-Core Processor
CPU Family: 0x19
CPU Model: 0x61
CPU Stepping: 0x2
CPU Type: 0x0
Speed: 5171 MHz
12 logical processors
6 physical processors
Hyper-threading: Supported
FCMOV: Supported
SSE2: Supported
SSE3: Supported
SSSE3: Supported
SSE4a: Supported
SSE41: Supported
SSE42: Supported
AES: Supported
AVX: Supported
AVX2: Supported
AVX512F: Supported
AVX512PF: Unsupported
AVX512ER: Unsupported
AVX512CD: Supported
AVX512VNNI: Supported
SHA: Supported
CMPXCHG16B: Supported
LAHF/SAHF: Supported
BMI1: Supported
BMI2: Supported
F16C: Supported
FMA: Supported
Operating System:
Ubuntu 26.04.1 LTS (64 bit)
Kernel Name: Linux
Kernel Version: 7.0
glibc Version: 2.43
X Server Vendor: The X.Org Foundation
X Server Release: 12401010
X Window Manager: KWin
Steam Runtime Version: steam-runtime_1.0.20260714.251828
Client Information:
Version: 1790904859
Browser GPU Acceleration Status: Disabled
Browser Canvas: Unavailable
Browser Canvas out-of-process rasterization: Disabled
Browser Direct Rendering Display Compositor: Disabled
Browser Compositing: Disabled
Browser Multiple Raster Threads: Enabled
Browser OpenGL: Disabled
Browser Rasterization: Disabled
Browser Raw Draw: Disabled
Browser Skia Graphite: Disabled
Browser Video Decode: Disabled
Browser Video Encode: Disabled
Browser Vulkan: Disabled
Browser WebGL: Unavailable
Browser WebGL2: Unavailable
Browser WebGPU: Disabled
Browser WebNN: Disabled
Video Card:
Driver: AMD AMD Radeon RX 7600 XT (radeonsi, navi33, ACO, DRM 3.64, 7.0.0-38-generic)
Driver Version: 4.6 (Compatibility Profile) Mesa 26.0.8-1ubuntu0.3
OpenGL Version: 4.6
Desktop Color Depth: 24 bits per pixel
Monitor Refresh Rate: 59 Hz
VendorID: 0x1002
DeviceID: 0x7480
Revision Not Detected
Number of Monitors: 1
Number of Logical Video Cards: 1
Primary Display Resolution: 1920 x 1080
Desktop Resolution: 1920 x 1080
Primary Display Size: 20.75" x 11.65" (23.78" diag), 52.7cm x 29.6cm (60.4cm diag)
Primary VRAM: 16384 MB
Sound card:
Audio device: ATI R6xx HDMI
Memory:
RAM: 15665 Mb
VR Hardware:
VR Headset: None detected
No VR configuration with trackers detected
Most number of trackers in a session: 0
Miscellaneous:
UI Language: English
LANG: en_US.UTF-8
Total Hard Disk Space Available: 928721 MB
Largest Free Hard Disk Block: 94354 MB
Storage:
Number of SSDs: 3
SSD sizes: 1000G,1000G,256G
Number of HDDs: 0
Number of removable drives: 0
Steps to reproduce
Deadlock also freezes without alt-tabbing at all.
What I found
GPU and kernel are not involved: no GPU resets or ring timeouts in
journalctl -b -k, and no thread of the game is inDstate. All game threads sit at ~0% CPU while frozen (not a busy loop).Frozen Risk of Rain 2 (PID 12513):
dxvk-submit(TID 12578) is inunix_wait_for_peer./proc/12513/task/12578/stack:/proc/12513/task/12578/syscallshows syscall 42 (connect), fd 0x13b, address length 110./proc/12513/mem) is the abstract socket:\0/tmp/steam_chrome_overlay_uid1000_spid12513ss -xlpnshows that socket is owned bygameoverlayui(PID 12621) and has a full backlog:Recv-Q 11 > backlog limit 10. A healthy helper for another running game showed Recv-Q 0.
UnityGfxDeviceWand theWSI swapchainthreads are all waiting on futexes behind the blocked submit thread.gameoverlayuishowed ~0.2% CPU, waiting on a futex.So the game's
connect()has no timeout, and it waits forever on a helper that is not accepting.Related log lines
In
steamconsole output, shortly before the game stopped:The
webhelper.txtlog shows the overlay browser windows starting normally and has no errors.Ruled out
PROTON_ENABLE_WAYLAND=1(removed, still freezes)KWIN_DRM_NO_DIRECT_SCANOUT=1)Confirmation
During a freeze (game PID 84103, overlay helper PID 84214), I ran
kill -9on only thegameoverlayuihelper. Three seconds later no game thread was inunix_wait_for_peerany more:dxvk-submitwas infutex_do_waitandUnityGfxDeviceWinfutex_wait_multiple. <Add: the game resumed rendering / the game crashed / the game ran without an overlay.> This confirms the game'sconnect()to the overlay helper's socket is what blocks the render path, and that the helper is the process that has stopped responding.Still missing: a backtrace of the stuck helper before killing it.
Workaround
Disable "Enable the Steam Overlay while in-game" per game. The freeze then does not happen.
Expected behavior
The game should not hang if the overlay helper is stuck, and the helper should keep accepting connections after a focus change.