We have a standalone server build for Linux. It is managed by supervisord, which is set up to restart the server when it dies.
Sometimes the server crashes (segmentation faults, mostly), and I expected that this causes the process to exit, but it doesn’t, and so it’s not restarting.
The end of our log looks like this:
CommonUnixCrashHandler: Signal=11
[2024.02.13-10.50.33:408][804]LogCore: === Critical error: ===
Unhandled Exception: SIGSEGV: invalid attempt to read memory at address 0x00000000000002a4
[2024.02.13-10.50.33:408][804]LogCore: Fatal error!
[MORE CALLSTACK FRAMES HERE]
0x00007f99f4818d90 libc.so.6!UnknownFunction(0x29d8f)
0x00007f99f4818e40 libc.so.6!__libc_start_main(+0x7f)
0x0000000004241029 MyGameServer!_start()
[2024.02.13-10.50.33:419][804]LogExit: Executing StaticShutdownAfterError
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
The process is still around, with 16 threads that appear to all be either sleeping or waiting on a mutex in __pthread_cond_wait_common.
Why does the game not exit properly, is there any crash handler related setting I can change to make it exit after it has reported the crash here?