Reported: On Windows the rf455 gameserver exits every 30 to 46 minutes under heavy grinding with "fatal error: invalid runtime symbol table", and players lose their progress since the last save.
Found: That message comes from the Go runtime itself, when it walks a thread's stack and finds an address that belongs to no function. The server runs no unsafe memory code on that path and its database driver is pure Go, so we tried to reproduce it under load:
- 30 minutes on Windows with 64 bots killing monsters at about 3 per second at 100,000x experience, with logins, logouts and saves throughout, about three times your load. No crash.
- 25 minutes of the same load under Go's race detector. It found one place where two logins on the same account read each other's state unsynchronised, which is fixed in the next RF 4.55 update. That one cannot damage memory, so it does not explain the crash.
With no reproduction, something outside the server running inside its process (an antivirus, overlay or monitoring tool) or the machine's memory fits better than the server's code. The lines the runtime prints with the error name the function and address, and they decide which.
Also affected: The server saves a character when it logs out, not while it plays, which is why a crash rolls back the whole session.
Planned fix: We are adding a hot backup system in the next update: the server keeps each character's latest state on disk as it plays, and after a crash and restart it loads that state instead of the last database save, so a crash no longer rolls players back.
Needed:
- The full crash output: the line before "fatal error" (it starts "runtime: invalid pc-encoded table f=") and at least the first goroutine block after it.
- The server version, and the Windows version.
- Any antivirus, overlay, or monitoring software running on that machine.
- Whether it still crashes with the environment variable
GODEBUG=asyncpreemptoff=1set for the gameserver.
- Whether a memory test of that machine, or running the server on another machine, changes anything.