Dedicated server via Zen Store with -nothreading crash due to data load failure

Hello,

while trying to enforce truly single threaded dedicated server, testing with -nothreading parameter. In combination with ZenStore enabled it fails to load any data on boot.

AI helped analyze it with following outcome:

"The bug: FStorageServerPackageStoreBackend::FAsyncInitRunnable (in StorageServerPackageStore.cpp:86) fires off a thread to populate the package store entries. Under -nothreading, FRunnableThread::Create() returns nullptr because GetSingleThreadInterface() isn’t implemented. The code silently triggered the completion event without ever calling Run(), leaving StoreEntriesMap empty, so every package lookup returned Missing.

The fix: One-line change — call Run() synchronously when the thread can’t be created, instead of just triggering the completion event. This is arguably a bug in the engine’s -nothreading support for ZenStore.

The two IoDispatcher thread guards (StorageServerIoDispatcherBackend.cpp and IoDispatcher.cpp) are defensive but not strictly required for this fix — the synchronous inline paths already existed. Worth mentioning to Epic though, as those thread creations also silently fail under -nothreading."

Proposed changes:

Engine\Source\Runtime\StorageServerClient\Private\StorageServerPackageStore.cpp

Optional:

Engine\Source\Runtime\StorageServerClient\Private\StorageServerIoDispatcherBackend.cpp

Engine\Source\Runtime\Core\Private\IO\IoDispatcher.cpp

I wonder if the above proposed changes(they work, server boots/works successfully with it) are legit and or if you would be interested to look into it and do the fix on your side.

Also part of this is question how well maintained/tested is the -nothreading parameter ? And if it is a legit option to consider for shipping in order to force true single threading on dedicated server.

Thank you.

Jiri

Steps to Reproduce
Run Dedicated Server cooked with ZenStore enabled, with -nothreading command line parameter. Observe immediate crash on boot when engine fails to load any data.

Thanks for the report. We generally have test coverage for zen streaming for client platforms, but less so for server platfoms (and not for nothreading execution of servers), so this wasn’t caught. I’m going to take the one line fix and the two other changes I’ll leave out now even though I agree they are reasonable defensive changes.