Yes! As I hoped, all three issues reported by eanticev, Albie_123 and woodzong are indeed related. I have reasons to believe the problem has been introduced by changes in the garbage collector introduced in the Unreal 4.20, because the reproducibility is so high that I can’t explain how the bug could have been passed unnoticed so far. Here’s the catch: during garbage collection, a few objects (in particular, the GameMode object, but occasionally also other actors), may be temporarily marked “unreachable”. The process was changed in Unreal 4.20 to introduce some form of parallelism, so I presume the GCFSM code related to garbage collection is now called at a time when objects may be unreachable, a case that did not occur before Unreal 4.20. When the GCFSM code found an unreachable context object, the context was abandoned and its FSMs stopped. Since I don’t want to mess with the Unreal internal flags, I now replaced a FWeakObjectPtr::Get() with a FWeakObjectPtr::GetEvenIfUnreachable() call and everything is now working.
I am packaging the fix right now and will push it immediately. It usually takes a day or two to be online, I’ll keep you posted.
Thanks to all of you for the reports!
PS: Widgets (as in Albie_123 report) seem to always be marked unreachable… that was helpful in addressing the bug since it removed the little non-deterministic behaviour of actors that may or may not be marked unreachable.