Hi, it seems that the SteamController plugin in 5.5.4 has a chance to hit a race condition on application shutdown where the FSteamController destructor attempts to check if SteamInput() != nullptr, but the required Steam DLL has already been unloaded. This occurs on both Steam and EGS clients on Windows.
I do not have a SteamController to fully test but the DLL should still be loaded at that time. I did a debugging session and the DLL is loaded in FSteamSharedModule::LoadSteamModules and unloaded in FSteamSharedModule::UnloadSteamModules both are inlined so you will need to monitor FSteamSharedModule::StartupModule\FSteamSharedModule::ShutdownModule which invoke the other 2.
The Shutdown\Unload one is the most interesting here as they happen after FSlateApplication::Shutdown so the DLL should still be loaded. Can you share the log? I’m interested to know which exception is being thrown and check for other related messages.
I do see that there is a method that can validate the DLL is available in FSteamSharedModule so a quick workaround could probably be:
There is nothing useful in the log unfortunately. The exception might be logged in CrashContext.runtime-xml if you are collecting that file.
I should mention that I didn’t try to compile the code snippet so you might have to fiddle a bit. Let me know if that helps, I could add it for the future.
Thanks, that sounds like a good check to perform so I’ll try adding that to see if it makes a difference for now.
Regarding the logs, we’ve only had external users hitting this crash so I had to redact some information from one of them (starting from the RequestExit), but maybe that will still be useful.
I’ll let you know if we see any change with that modification once we deploy a new release.
And the snippet seems to be fine from some brief internal testing. We’ll keep an eye on it once it’s deployed to see if it makes a noticeable difference.