CoreGui WaitForChild(s) preventing game.IsLoaded from firing permanently, breaking the game

Players are experiencing an issue where the coregui will wait indefinitely and prevent game.IsLoading from firing. It simply happens on join, but not to everyone. Using the windows app store version fixes the issue permanently though. All users affected are using windows. There are no server issues associated with this bug, and all users have this waitforchild warning. I am not renaming any instance to CoreGui, though I am using some coregui functions in replicatedfirst.
The game in question is Absolvement [ALPHA] - Roblox


Expected behavior

The game should fire .IsLoaded once all initial assets are replicated

A private message is associated with this bug report

Hi @MLGwarfare04,

Thank you for the report! Can you still reproduce the issue?

If so, can you send some log files and a dump file in the private message linked to this bug report?

Make sure to tag me as well!

Hello! I believe this might be related:

TL;DR, from what we can tell, this occurs when users experience long load times. The “Infinite yield possible” warning is actually misfiring: the WaitForChild calls do eventually resolve, it just might take a while. We’re fixing these warnings soon.

The .isLoaded bit is interesting, though. I tried joining Absolvement while simulating a poor internet connection and everything still loaded in as normal for me, so something else might be going on here. As the moment though, I’m not able to reproduce.

We’ll continue investigating on our end, but wanted to share this update in the meantime.

sorry for not replying to my own thread, but we were able to (i think) resolve this through deferring the loading screen finished event in the 2nd script and resuming the thread with coroutine.resume instead of doing a raw game.isloaded. Since we did that patch a day or two after the initial post I forgot to reply here but there have been no current reports of the loading screen not working, but the coregui waitforchilds do still appear. if you are interested in what we did in the main script, it is below:

local C2,C
local SkipThread
print('waiting for loaded signal')
if not game:IsLoaded() then 
	SkipThread = task.spawn(function()
		C = script:WaitForChild("ExecuteOnRun"):WaitForChild("GameStartScreen"):WaitForChild("Skip").Event:Once(function()
			print('GOT SKIP EVENT')
			coroutine.resume(WaitThread)
		end)
	end)
	
	C2 = game.Loaded:Once(function()
		coroutine.resume(WaitThread)
	end)
	coroutine.yield()
end
if C then C:Disconnect() end
if C2 then 
	C2:Disconnect() 
	task.cancel(SkipThread)
end
1 Like

Gotcha, thanks for the update! Marking this as fixed.