On our Linux Dedicated server in 5.6, once we do an engine exit request, the outstanding http requests are not cancelled properly anymore and the server does not exit, using 100% CPU outputting infinitely this:
[2025.07.31-09.29.44:624][232]LogHttp: Warning: Ticking HTTPThread for 1 outstanding Http requests.
In 5.5 this works perfectly fine. For comparison reasons, I am attaching the logs on engine exit request for 5.5 and 5.6.
This happens both in 5.6 running with one single thread (-nothreading) and multiple threads.
There should be no behavior change regarding this flow. Could you confirm you didn’t add any custom config for SoftLimitSeconds? It seems in log 5.6_engine_exit, it never ends probably because FlushTimeSoftLimitSeconds and FlushTimeHardLimitSeconds < 0.
Can you trace into that function FHttpManager::Flush to confirm? You could also enable Verbose level of LogHttp to see what’s their values and flush reason, which will be output by this line of code in function FHttpManager::Flush:
UE_CLOG(!IsRunningCommandlet(), LogHttp, Verbose, TEXT("[FHttpManager::Flush] FlushReason [%s] FlushTimeSoftLimitSeconds [%.3fs] FlushTimeHardLimitSeconds [%.3fs] SecondsToSleepForOutstandingThreadedRequests [%.3fs]"), LexToString(FlushReason), FlushTimeSoftLimitSeconds, FlushTimeHardLimitSeconds, SecondsToSleepForOutstandingThreadedRequests);The runtime args to enable LogHttp as Verbose should be:
[2025.08.01-12.29.22:250][288]LogHttp: Warning: Ticking HTTPThread for 1 outstanding Http requests.
This situation happens when we try to terminate the Linux server from a different process when we want to deplay a new one. We do this by sending SIGTERM to the process.
In 5.5 this was fine and the http was seemingly cancelled by the http module.
The FlushReason is supposed to be ShutDown instead of FullFlush. Can you confirm if there is any place calling HttpManager::Flush method with EHttpFlushReason::FullFlush param during shutdown?
Also that remaining http request is supposed to be completed shortly unless it’s a large http request. You probably want to check what’s the url of it and why it can’t complete in time.
We’ve noticed a similar infinite wait issue before, it’s not because the http request not completed, but because user code call Flush during the complete delegate of http request, which is not supported, in that case you should be able to see warning through:
UE_CLOG(IsCurrentThreadCompletingRequest(), LogHttp, Warning, TEXT(“It’s not supported to call Flush during http request complete delegate!”));
You might want to check your full game log to see if you can find that warning.