This commit is contained in:
2026-07-21 22:06:10 +00:00
parent afc64b83c1
commit 5215560ede
25 changed files with 4364 additions and 333 deletions
@@ -0,0 +1,307 @@
# Conduit Linux GameEvents Re-run - 2026-06-14
## Scope
- Pulled latest Conduit commits from `origin/main`.
- Inspected the new Phase 2 dispatch/GameEvents diff.
- Rebuilt clean on Linux with GCC 12.
- Deployed the resulting package to CS2 server `Test Sunucusu`.
- Verified Linux RTTI vtable lookup, GameEvent manager connection, pre/post dispatch, cancellation, profiler accounting, and cleanup.
- Did not touch the Satisfactory server files/container.
## Git
Latest commits after pull:
```text
a5c1c13 (HEAD -> main, origin/main, origin/HEAD) docs: Linux re-test steps for the Phase 2 GameEvents slice
ffb57f3 Phase 2 start: dispatch core + GameEvents, with an RTTI vtable finder
4078ab7 PLAN: close the Linux memscan question - M1 fully done on both platforms
```
Diff summary inspected:
```text
PLAN.md | 4 +-
core/CMakeLists.txt | 1 +
core/src/conduit/commands.cpp | 85 ++++++++++++
core/src/conduit/gameevents.cpp | 294 ++++++++++++++++++++++++++++++++++++++++
core/src/conduit/gameevents.h | 73 ++++++++++
core/src/conduit/memscan.cpp | 237 ++++++++++++++++++++++++++++++--
core/src/conduit/memscan.h | 7 +
core/src/plugin.cpp | 5 +
docs/linux-bringup.md | 24 ++++
```
Working tree after the run:
```text
## main...origin/main
```
## Build
Build command used:
```sh
cmake -S /root/codex/Conduit -B /root/codex/Conduit/build/linux-rerun -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_C_COMPILER=gcc-12 \
-DCMAKE_CXX_COMPILER=g++-12
cmake --build /root/codex/Conduit/build/linux-rerun
```
Result: build succeeded.
Final build line:
```text
[30/30] Linking CXX shared library package/addons/conduit/bin/conduit.so
```
Warnings only:
```text
- protobuf syntax warnings
- paths.cpp snprintf truncation warnings
- commands.cpp volatile compound assignment deprecated
- log.cpp snprintf truncation warning
- C-only warning for C++ flags on Zydis.c
```
No full cmake/ninja failure output exists because the build did not fail.
## Deploy
Deployed package:
```text
/root/codex/Conduit/build/linux-rerun/package/.
```
Destination:
```text
/var/lib/gamepanel/servers/c2b47a90/game/csgo/
```
Server restarted:
```text
gp_c2b47a90
```
Satisfactory server was not modified.
## Initial Load
`meta list` and `conduit_status` after deploy:
```text
rcon: authenticated
--- meta list ---
Listing 1 plugin:
[01] Conduit (0.1.0-dev) by Conduit Contributors
--- conduit_status ---
Conduit 0.1.0-dev
uptime : 88.9 s
game frames : 5066
log file : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
crash report: armed (use conduit_crash_test to verify)
```
Startup log lines:
```text
2026-06-14 11:34:50 [INFO] gamedata: 1 files loaded: 0 signatures, 0 offsets, all valid
2026-06-14 11:34:50 [INFO] gameevents: armed via CGameEventManager vtable 0x7f47c7ae2f50 — instance captured on next LoadEventsFromFile
2026-06-14 11:34:50 [INFO] core: Conduit 0.1.0-dev loaded — crash reporter armed, profiler on
2026-06-14 11:34:50 [INFO] gameevents: game event manager connected (0x7f47c7e62460) — event listening live
2026-06-14 11:35:00 [INFO] core: first GameFrame observed — hook dispatch confirmed
```
## RTTI Vtable Checks
Commands:
```text
conduit_vtable server CGameEventManager
conduit_vtable server CCSPlayerController
```
Output:
```text
rcon: authenticated
--- conduit_vtable server CGameEventManager ---
[Conduit] CGameEventManager vtable @ 0x7f47c7ae2f50 first method -> 0x7f47c6d0aa80
--- conduit_vtable server CCSPlayerController ---
[Conduit] CCSPlayerController vtable @ 0x7f47c7ace5a8 first method -> 0x7f47c6b169a0
```
Result: Linux Itanium RTTI lookup passed for both classes.
## Listen Test
Commands:
```text
conduit_event_stop
conduit_event_listen player_spawn
mp_restartgame 1
```
RCON output:
```text
rcon: authenticated
--- conduit_event_stop ---
[Conduit] removed 0 test subscription(s)
--- conduit_event_listen player_spawn ---
[Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre)
[Conduit] [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post)
[Conduit] listening to 'player_spawn' (pre+post) — watch the log
--- mp_restartgame 1 ---
```
Log evidence:
```text
2026-06-14 11:55:18 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (pre)
2026-06-14 11:55:18 [INFO] gameevents: 'event_test' subscribed to 'player_spawn' (post)
2026-06-14 11:55:20 [INFO] event_test: [pre] player_spawn userid=0 attacker=-1
2026-06-14 11:55:20 [INFO] event_test: [post] player_spawn userid=0 attacker=-1
2026-06-14 11:55:20 [INFO] event_test: [pre] player_spawn userid=1 attacker=-1
2026-06-14 11:55:20 [INFO] event_test: [post] player_spawn userid=1 attacker=-1
```
`conduit_events` and `conduit_prof` after listen:
```text
rcon: authenticated
--- conduit_events ---
game events: manager connected, 2 subscription(s), 1 event(s) registered, FireEvent detour on
event_test player_spawn pre hits=2
event_test player_spawn post hits=2
--- conduit_prof ---
owner callsite calls avg p50 p99 max total
engine GameFrame 80323 2.28ms 4.19ms 4.19ms 27.49ms 183.11s
event_test player_spawn 4 38.1us 65.5us 65.5us 54.9us 152.6us
```
Result: pre and post dispatch both fired.
## Cancel Test
Commands:
```text
conduit_event_cancel player_spawn
mp_restartgame 1
```
RCON output:
```text
rcon: authenticated
--- conduit_event_cancel player_spawn ---
[Conduit] [INFO] gameevents: 'event_cancel_test' subscribed to 'player_spawn' (pre)
[Conduit] will cancel every 'player_spawn' until conduit_event_stop
--- mp_restartgame 1 ---
```
Log evidence:
```text
2026-06-14 12:02:21 [INFO] gameevents: 'event_cancel_test' subscribed to 'player_spawn' (pre)
2026-06-14 12:02:22 [INFO] event_test: [pre] player_spawn userid=0 attacker=-1
2026-06-14 12:02:22 [WARN] event_test: cancelling 'player_spawn' (pre)
2026-06-14 12:02:22 [INFO] event_test: [pre] player_spawn userid=1 attacker=-1
2026-06-14 12:02:22 [WARN] event_test: cancelling 'player_spawn' (pre)
```
There were no new `[post] player_spawn` lines after cancellation.
`conduit_events` and `conduit_prof` after cancel:
```text
rcon: authenticated
--- conduit_events ---
game events: manager connected, 3 subscription(s), 1 event(s) registered, FireEvent detour on
event_test player_spawn pre hits=4
event_test player_spawn post hits=2
event_cancel_test player_spawn pre hits=2
--- conduit_prof ---
owner callsite calls avg p50 p99 max total
engine GameFrame 107531 2.25ms 4.19ms 4.19ms 32.27ms 242.28s
event_test player_spawn 6 47.1us 65.5us 131.1us 76.9us 282.5us
event_cancel_test player_spawn 2 14.5us 16.4us 16.4us 14.9us 28.9us
```
Result: cancel path passed; post stayed at `hits=2` while pre advanced.
## Cleanup
Commands:
```text
conduit_event_stop
conduit_events
```
Output:
```text
rcon: authenticated
--- conduit_event_stop ---
[Conduit] removed 3 test subscription(s)
--- conduit_events ---
game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off
```
Final status:
```text
rcon: authenticated
--- conduit_status ---
Conduit 0.1.0-dev
uptime : 2228.6 s
game frames : 141868
log file : /home/steam/cs2-dedicated/game/csgo/addons/conduit/logs/conduit-20260614.log
crash report: armed (use conduit_crash_test to verify)
--- conduit_events ---
game events: manager connected, 0 subscription(s), 1 event(s) registered, FireEvent detour off
```
## Container and Panel State
Docker:
```text
/gp_c2b47a90 running running=true exit=0 oom=false
/gp_d8f13411 exited running=false exit=130 oom=false
```
Panel DB:
```text
uuid | name | status | slug | port
----------+----------------+---------+--------------+-------
c2b47a90 | Test Sunucusu | running | cs2 | 27015
d8f13411 | MukemmelSunucu | stopped | satisfactory | 7777
(2 rows)
```
## Odd Warnings
During the RTTI/vtable/memscan command window, the log briefly reported watchdog stalls outside Conduit context:
```text
2026-06-14 11:50:54 [WARN] watchdog: game thread has not advanced a frame for 509 ms (outside GameFrame)
2026-06-14 11:50:54 [WARN] watchdog: no Conduit context on the game thread — the stall is in engine/game code or an untracked path
2026-06-14 11:51:04 [WARN] watchdog: game thread has not advanced a frame for 585 ms (outside GameFrame)
2026-06-14 11:51:04 [WARN] watchdog: no Conduit context on the game thread — the stall is in engine/game code or an untracked path
```
The server recovered and continued through 141k+ frames. I did not see Conduit/Metamod/signal load failures or crashes in this run.