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


