308 lines
9.0 KiB
Markdown
308 lines
9.0 KiB
Markdown
# 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.
|
|
|