While the "thread-safe" variety of delegates does protect the invocation list from data races, if you use AddUObject, it will end up calling TWeakObjectPtr::Get() when it attempts to compact the invocation list (as it does when broadcasting or adding), which as far as I can tell is not thread-safe. This means it can sometimes incorrectly report that the object is no longer valid and should be removed from the invocation list.
#rnx
#rb phil.popp
#preflight 645beeb9ab621cb7013043a9
[CL 25429370 by charlie huguenard in ue5-main branch]
The generator created/destroyed events get called on the audio thread, so avoid manipulating containers used on the game thread in the event.
#rnx
#rb phil.popp, aaron.mcleran
#preflight 642db4d71d19c0312a39ab12
[CL 24937556 by charlie huguenard in ue5-main branch]