Recently, our team upgraded from UE4 version 4.15 to version 4.17. We have a build process that packages and distributes our prototype game using the Win64 Development configuration. Our prototype is built off of ShooterGame.
After upgrading to 4.17, we have noticed that relaunching the packaged executable after closing it will cause the Unreal Proccess to hang while doing async loading. The loading screen, or rather any window related to the process, will not appear. After opening the task manager, it shows a ShooterGame.exe process running with about 250 megabytes of allocated memory and no CPU usage. As the game attempts to load, the usage will slowly decline to 0% and remain there indefinitely.
Some observations:
This does not occur for all of our machines and is not exclusive to a particular Windows OS version. We had it happen on Windows 7, 8, and 10
This does not occur for PIE. Only packaged builds
This issue only occurs upon launching the executable, closing it, and attempting to reopen it
Sometimes, after about an hour, the game will in fact load (obviously we cannot be waiting an hour to playtest)
We were able to repro this with a Debug Configuration build and noticed it would hang during Async loading before the Checksum is performed on loaded files
Disabling firewall and antivirus had no impact
We never experienced this issue on 4.15
There is nothing that stands out in the logs
Is anyone else experiencing this issue? Any advice on where to proceed from here would be helpful.
(I keep failing to post this as a comment for some reason. Sorry for the bad “Answer”)
Some of my users are having this issue… some of the time. One guy was having the issue and it magically fixed itself one day, and another just randomly started getting it. Restarts don’t help, verifying files doesn’t help, reinstalling doesn’t help. Nothing about the affected computers points to any hardware issue. It’s proven nearly impossible to track down as I haven’t been able to recreate it on any of my 3 computers. I pushed out a dev build earlier with VeryVerbose logging turned on like so:
And then it just goes on like that, with a very HOT QueueRequest. It never tries to load another asset. What is special about FX_DamageIndicator.uexp? No idea. It’s just a cooked particle system. This project started with shootergame 4.12 and is now on 4.17.2. FX_DamageIndicator may have been created in 4.15 but I am not sure.
Received a reply this morning. Part of the response is copied below:
“As for the issue itself, have you attempted disabling Event Driven Loading? This is sometimes related to Async loading issues. It was not enabled automatically in 4.15 but has been enabled by default in projects as of 4.16.”
I did attempt it… however it caused a crash because I’m using StaticLoadObject to load an image at some point and I gave up. I can try just commenting out that line and see what happens I guess.
Managed to get a package running without Event Driven Loading and it did seem to fix the issue, at least for the 1 person that got back to me. However, it also seems to have prevented TextRenders from loading the font (roboto). Every digit is squares. UMG widgets seem to have loaded fonts just fine.
I’ve been taking a look at this issue today and found that our build machine wasn’t packaging our assets. When pak files are turned on, I wasn’t able to reproduce the problem. This could point towards a load order issue or a race condition that only happens when multiple files are opened during async load. It’s also possible that I just moved the race condition elsewhere. I’ll update again if we continue to see the problem.
I’ve always been having this problem with pak files on. Do you have blueprint nativization on by chance? I was having this strange issue after disabling event driven loading and the fix I discovered was to have blueprint nativization on. This seems to be a trend; that event driven loading OR blueprint nativization must be enabled to avoid certain issues. Perhaps the 3 settings interact in some crazy race condition?
We do not have nativization turned on. All of the reproduction uncertainty leads me to believe that the race condition still exists in some low level piece of code. Perhaps the lockless list code? I haven’t had an opportunity to comb through it yet to see if I can find anything, and that’s really pure speculation on my part.