Yeah we figured out already that custom tick intervals crashes the build. I gave Epic my build to reproduce the crash, however I have not heard back from them at all.
We did speak a bit about reproducing the issue. I did reproduce the crash, however the current problem is the size of the project and trying to narrow down the issue. With how the references in the project are set up, I can’t really simply migrate out the related content either, as it’ll just all come together.
Thank you all for continuing to look into the problem and trying to pinpoint the issue. I’m currently working on trying to use the project TheAgent provided to set up a reproduction from a fresh project.
Yeah sorry about the project size, its near completion hence its massive size.
Oh, didn’t see the comment from 5 days ago. Hope they’ll fix this bug soon.
I’m starting to think that this is something that will only occur in larger projects where a lot of things are going on.
TheAgent, if you have the time, would you be able to make a copy of your project and begin stripping things down to the minimum to see if we can get a reproduction with a smaller version of the project? I’d do it myself but you know this project a lot more than I do and know what can/can’t be removed.
It appears that this was fixed in the Unreal 4.12.4 hotfix, in this commit: .com/EpicGames/UnrealEngine/commit/1edb2b8d7ef8ba1df20a5cdd4c185d8e775b9508
Can anyone else confirm that this has fixed the problem for them? I’ve not been able to get the crash to occur with TheAgent’s project in 4.12.4 but I only know one of the many reproduction cases so I would like to hear from you all.
My project was updated to 4.12.4 today, and this unfortunately does not appear to have actually fixed the problem; I’m seeing the same assert as before.
I’m wondering if the problem is a thread safety issue?
I apologize for the delay, I must’ve missed your last comment. Unfortunately I’m still unable to reproduce the issue I was previously seeing in TheAgent’s project. If you have the time, would it be possible for you to provide a repro that occurs in 4.12.5?
I don’t think I can do that without getting permission from our partner on our project. I did spend several days researching the problem last week and I can tell you what I did to fix it in TickTaskManager.cpp
:
-
Cooling down tick functions could (incorrectly) end up with the Enabled TickState rather than the CoolingDown TickState if
SetTickFunctionEnable()
was called on them while they were registered and cooling down. This would sometimes causeRescheduleForIntervalParallel()
to be called on a tick function that was already cooling down, which is what leads to this assert. The solution is to make sure that theif
statement rather than theelse
statement inSetTickFunctionEnable()
is called if the function’s TickState is CoolingDown. -
There is a bug in the code that removes tick functions from the cooling down linked list in
RunPauseFrame()
that can lead to an infinite loop. The solution is to only allow the linePrevTickFunction = TickFunction;
to be executed in the event thatTickFunction
was not removed from the cooling down linked list; otherwisePrevTickFunction
should continue to point to the function before TickFunction.
Thank you for that information. Seeing as putting in a bug report without some sort of reproduction wouldn’t yield all that many results, would it be possible for you to put in a Pull Request for the changes you made? This can be done through our Github repositories. If you do so, the change will be reviewed and merged if it is deemed to be useful. You can feel free to link to this thread for context as well. This will also grant you the Engine Contributor title on our forums if your change is taken.
Hello ,
Is putting in a pull request an option for you? It would be helpful if you could do so, but let me know if that’s not an option.
I’ll speak to the necessary people about it when my current project settles down a bit in a few weeks and get back to you.
@ can you provide the exact changes you made to solve this crash? It’s driving me crazy!
I’ll try to submit the pull request at some point in the next few days.
I’ve submitted a fix for this bug in this pull request:
.com/EpicGames/UnrealEngine/pull/2776
Those working with TickIntervals may also be interested in this associated pull request – .com/EpicGames/UnrealEngine/pull/2777 – which addresses the issue brought up here: Event Tick Delta Seconds is wrong when using a custom tick interval - Programming & Scripting - Epic Developer Community Forums
Finally done – please see the new answer that I added to the main question.
Finally done – please see the new answer that I added to the main question.
Thank you for submitting that. I’ve set myself to watch the JIRA that was generated for this pull request. I’ll just leave this post open until the pull request get accepted or otherwise.
PR has been partially accepted and merged into the engine. You can find that commit on his Pull Request link above. As we don’t have a local way of reproducing this issue since I stopped seeing the issue with the project that I was provided, the full fix was not taken as we couldn’t ensure that it would even fix the issue. If any of you are still experiencing this problem, please feel free to try the official commit’s changes. If those aren’t able to fix the issue for you, you can feel free to merge full changes into your own source built engine and that should be able to help.
Have a nice day!