protonscr

Steam client aborts on IClientNetworkingSocketsSerialized::SendP2PRendezvous under Proton

protonclosed
ValveSoftware/Proton#10009 · opened 2026-07-27 by DirectorJazz · updated 2026-07-27 · 1 comments · github
2 matching comments, n / p to jump
DDirectorJazz 2026-07-27 github

Steam client aborts on IClientNetworkingSocketsSerialized::SendP2PRendezvous under Proton (Deadlock, appid 1422450)

Summary

Joining a friend's lobby in Deadlock (appid 1422450) under Proton reliably
aborts the native Linux Steam client with a fencepost deserialize mismatch.
The game itself does not crash — it is left with every thread blocked on IPC to
the now-dead client, so it hangs indefinitely and never registers as "Playing".

src/clientdll/interfacemap_client.h (5580) : Assertion Failed: Fencepost deserialize mismatch in IClientNetworkingSocketsSerialized::SendP2PRendezvous
src/clientdll/interfacemap_client.h (5580) : Assertion Failed: Fencepost deserialize mismatch in IClientNetworkingSocketsSerialized::SendP2PRendezvous
terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_S_create
/home/<user>/.steam/debian-installation/steam.sh: line 966: <pid> Aborted (core dumped) "$STEAMROOT/$STEAMEXEPATH" "$@"

Reproduced 6 times in ~90 minutes (12 assert lines) on 2026-07-26.

Reproduction

  1. Launch Deadlock under Proton (Windows build; no native Linux depot is installed).
  2. Accept/join a friend's lobby — the peer-to-peer path, not matchmaking.
  3. The Steam client aborts within seconds. The game window survives but is wedged.

Once a rendezvous is queued, the assert also fires ~20 s after game launch,
before any lobby interaction, presumably as the pending rendezvous is retried.

What the game process looks like after the abort

All threads parked, nothing running — consistent with blocking on a dead peer:

  • 45 threads, 0 spinning above 5% CPU
  • 27 in futex_do_wait, 16 in ntsync_schedule, 2 in poll_schedule_timeout
  • GPU utilisation 0%, VRAM 733 / 2048 MiB (not a resource exhaustion case)
  • Steam client PID: gone

Tested and ruled out

Change Result
Remove -dev / MANGOHUD=1 from launch options identical assert
Proton 9.0-4f game exits silently ~6–10 s after launch, never reaches this path
Wipe + rebuild the compatdata prefix identical assert
GE-Proton11-3 (released 2026-07-25) identical assert

GE-Proton ships a distinct lsteamclient build, so this is not one shim
tested twice:

  • GE-Proton11-3 files/lib/wine/x86_64-windows/lsteamclient.dll — md5 b9a83a935db63ca9419ccaa2d663fdd7, 5.6 MB
  • Proton Experimental files/lib/wine/x86_64-windows/lsteamclient.dll — md5 f13c727c90e10600231d2adc057a4c77, 5.5 MB

Two independently built shims failing against the same client deserializer
suggests both are generated from a Steamworks SDK older than the interface
version the current client expects.

Environment

Distro Linux Mint 22.3, X-Cinnamon / X11
Kernel 7.0.0-28-generic (ntsync module loaded)
CPU Intel Core i7-4790K
GPU NVIDIA GeForce GTX 950, 2048 MiB, driver 580.173.02
Steam client buildid 1784778118
Proton Experimental experimental-11.0-20260713 (default branch, no betakey)
GE-Proton GE-Proton11-3
Game Deadlock appid 1422450, buildid 24391599

Crash IDs (auto-uploaded)

Directly on the SendP2PRendezvous assert:

bp-e20f9f90-f3f6-4d3e-b670-0b30f2260726
bp-f8fb7eb8-5d7b-4abf-9cb3-9e59e2260726
bp-6f413dbd-97d9-48ee-8a10-5d4252260726
bp-22a56d0f-485c-44bc-8186-b1ce72260726

Same session, downstream pipes.cpp (900) : fatal stalled cross-thread pipe
aborts that follow once the client is gone:

bp-59e6639b-319d-4708-989a-947762260726
bp-7f66103c-e572-42a4-948b-e60912260726
bp-df85d58a-e393-409e-9469-464952260726
bp-baac2350-9e7f-4b2f-8c98-bd4002260726
bp-2f933b55-a8b3-49d4-b352-d54182260726
bp-7880396e-c81f-4a1a-be40-160652260726
bp-376ee1e6-7142-4068-904b-d9b482260726
bp-a7493b61-6078-428d-87da-4eb202260726

I used AI to help write this, it knows more than i do.

DDirectorJazz 2026-07-27 github

Addendum: root cause appears to be lsteamclient missing SteamNetworkingSocketsSerialized 004/005

Follow-up to the SendP2PRendezvous fencepost abort. Interface version strings
extracted with strings -a from the shipped binaries on a stock install.

Measured

Native Linux Steam client (identical in all five copies:
ubuntu12_32/, linux32/, linux64/, steamrt32/, steamrt64/steamclient.so),
client buildid 1784778118:

SteamNetworkingSocketsSerialized001
SteamNetworkingSocketsSerialized002
SteamNetworkingSocketsSerialized003
SteamNetworkingSocketsSerialized004
SteamNetworkingSocketsSerialized005

Proton's lsteamclient.dll (files/lib/wine/x86_64-windows/lsteamclient.dll)
— all three builds tested:

SteamNetworkingSocketsSerialized001
SteamNetworkingSocketsSerialized002
SteamNetworkingSocketsSerialized003
Proton build md5 of lsteamclient.dll max Serialized version
Proton Experimental experimental-11.0-20260713 f13c727c90e10600231d2adc057a4c77 003
GE-Proton11-3 (2026-07-25) b9a83a935db63ca9419ccaa2d663fdd7 003
Proton 9.0-4f 003

Deadlock's own game/bin/win64/steamnetworkingsockets.dll references:

SteamNetworkingSocketsSerialized003
SteamNetworkingSocketsSerialized005

Inference

The game requests SteamNetworkingSocketsSerialized005, which the native client
implements. lsteamclient — the Wine-side bridge that marshals these calls —
implements nothing above 003. The resulting SendP2PRendezvous payload does
not match what the client's 005 deserializer expects, and the client aborts on
the fencepost check rather than rejecting the call.

This would explain why the failure is identical across three independently built
Proton versions, including a GE build released one day before testing: none of
them has been regenerated against the SDK that introduced 004/005.

If that reading is right, the fix is regenerating lsteamclient for
SteamNetworkingSocketsSerialized 004 and 005, and no user-side Proton choice
can work around it.

Note on the client-side abort

Independently of the Proton fix: a malformed serialized call from a game process
causes the Steam client itself to std::terminate and core-dump, which
takes down the user's whole Steam session and leaves the game with every thread
blocked on IPC to a dead peer. A rejected call would seem preferable to an
aborted client.

Not the cause (checked)

  • GPU/VRAM: 733 of 2048 MiB in use, GPU utilisation 0% at the moment of abort
  • Resource stall: all 45 game threads parked, 0 spinning above 5% CPU
  • Prefix state: reproduced on a freshly created prefix
  • Launch options: reproduced with a bare command line
  • Steam client beta: not enrolled, stable channel

Proton versions

Launch options

DLLs