VoipListenerSynthComponentが保持するAudioComponentがGCされない

VoipListenerSynthComponentは FVoiceEngineImpl::SubmitRemoteVoiceData にOwner指定なしで生成され、OuterはTransientとして生成されます。

RemoteTalkerが設定されている場合、同関数内のApplyVoiceSetting呼び出し内でSynthComponentはAudioComponentを生成し、
FVoiceSettings::ComponentToAttachToが設定されている場合、SynthComponentが保持するAudioComponentだけをRegisterComponentWithWorldに登録します。

この状態でレベル遷移を行うと、AudioComponentはSynthComponentから強参照されているためGCされませんが、
Worldには紐付いているため、
void FScene::Release()でEnsureし、以下のログを出力します。

LogOutputDevice: Error: Ensure condition failed: !ActorComponent->IsRegistered() || ActorComponent->GetScene() != this [File:Z:\perforce\Game\Engine\Source\Runtime\Renderer\Private\RendererScene.cpp] [Line: 2733]
LogOutputDevice: Error: Component Name: AudioComponent /Engine/Transient.VoipListenerSynthComponent_5:AudioComponent_0 World Name: World None.None Component Asset: /Engine/Transient.VoipListenerSynthComponent_5:Synth

FScene::Releaseの内部のチェックはDevelopmentビルドでだけ有効になるので、クリティカルな問題ではありませんが、
これらの問題を回避するためにVoip関連のAPI呼び出しやレベル遷移時の後始末に特定の方法が必要になるのであればご教示いただけると幸いです。

追記ですが、SynthComponentにぶら下がったまま次のレベルに移動して
AudioComponentが不幸にも再生成されずに利用されると
古いレベルに登録されていたAudioComponent->GetWorld()が解放済みのメモリを返すために
不正アクセスが発生してクラッシュします。

原因が判明したのでCloseします。

4.21への対応の不備でRemoveAllRemoteTalkers()が呼び出されていないだけでした。
レベル遷移前に
IOnlineVoice::RemoveAllRemoteTalkersとUVOIPStatics::ClearAllSettingsを呼び出すと良さそうでした。