Client crashes on ServerTravel

What’s the proper way to bring connected players from a lobby map to a game map?

I have clients connecting to a lobby map, and then the server calls UWorld::ServerTravel to bring everyone to the selected map.
It appears this is happening, but I get an assert crash on the client in:

UEditorEngine::VerifyLoadMapWorldCleanup()

which seems to be related to not doing some kind of cleanup on the Lobby level. Here’s the log:

[2014.09.15-19.30.19:525][362]LogLoad: LoadMap: 192.168.0.25//Game/Maps/Fenris_Level01?game=/Game/Blueprints/BP_FenrisNormalGameMode.BP_FenrisNormalGameMode_C
[2014.09.15-19.30.19:525][362]LogNet: World NetDriver shutdown IpNetDriver_0 [GameNetDriver]

[2014.09.15-19.30.19:555][362]LogLoad: World /Game/Maps/GameLobby.GameLobby not cleaned up by garbage collection!

[2014.09.15-19.30.19:559][362]LogReferenceChain: Searching referencers for GameLobby. This may take several minutes.
[2014.09.15-19.30.19:608][362]LogReferenceChain: Generating reference graph ...
[2014.09.15-19.30.19:610][362]LogReferenceChain: Level 0 has 4 nodes ...
[2014.09.15-19.30.19:615][362]LogReferenceChain: Level 1 added 16 nodes ...
[2014.09.15-19.30.19:619][362]LogReferenceChain: Level 2 added 35 nodes ...
[2014.09.15-19.30.19:622][362]LogReferenceChain: Level 3 added 24 nodes ...
[2014.09.15-19.30.19:627][362]LogReferenceChain: Level 4 added 72 nodes ...
[2014.09.15-19.30.19:630][362]LogReferenceChain: Level 5 added 124 nodes ...
[2014.09.15-19.30.19:634][362]LogReferenceChain: Level 6 added 34 nodes ...
[2014.09.15-19.30.19:637][362]LogReferenceChain: Level 7 added 0 nodes ...
[2014.09.15-19.30.19:637][362]LogReferenceChain: Generating reference chains ...
[2014.09.15-19.30.19:637][362]LogReferenceChain:
[2014.09.15-19.30.19:638][362]LogReferenceChain: External Referencers:
[2014.09.15-19.30.19:638][362]LogReferenceChain:
[2014.09.15-19.30.21:452][362]LogReferenceChain: (root) GCObjectReferencer /Engine/Transient.GCObjectReferencer_0->UGCObjectReferencer::AddReferencedObjects()
[2014.09.15-19.30.21:452][362]LogReferenceChain:   BP_GameLobbyWidget_C /Engine/Transient.FenrisGameEngine_0:FenrisLocalPlayer_0.BP_GameLobbyWidget_C_0->CallFunc_Array_Get_Item2
[2014.09.15-19.30.21:453][362]LogReferenceChain:     FenrisPlayerState /Game/Maps/GameLobby.GameLobby:PersistentLevel.FenrisPlayerState_3->Property
[2014.09.15-19.30.21:453][362]LogReferenceChain:       Level /Game/Maps/GameLobby.GameLobby:PersistentLevel->OwningWorld
[2014.09.15-19.30.21:453][362]LogReferenceChain:         (target) World /Game/Maps/GameLobby.GameLobby
[2014.09.15-19.30.21:454][362]LogReferenceChain:
[2014.09.15-19.30.21:454][362]LogReferenceChain: (root) GCObjectReferencer /Engine/Transient.GCObjectReferencer_0->UGCObjectReferencer::AddReferencedObjects()
[2014.09.15-19.30.21:454][362]LogReferenceChain:   BP_GameLobbyWidget_C /Engine/Transient.FenrisGameEngine_0:FenrisLocalPlayer_0.BP_GameLobbyWidget_C_0->CallFunc_Array_Get_Item
[2014.09.15-19.30.21:455][362]LogReferenceChain:     FenrisPlayerState /Game/Maps/GameLobby.GameLobby:PersistentLevel.FenrisPlayerState_2->Property
[2014.09.15-19.30.21:455][362]LogReferenceChain:       Level /Game/Maps/GameLobby.GameLobby:PersistentLevel->OwningWorld
[2014.09.15-19.30.21:455][362]LogReferenceChain:         (target) World /Game/Maps/GameLobby.GameLobby
[2014.09.15-19.30.21:462][362]LogReferenceChain:
[2014.09.15-19.30.21:462][362]LogReferenceChain: (root) GCObjectReferencer /Engine/Transient.GCObjectReferencer_0->UGCObjectReferencer::AddReferencedObjects()
[2014.09.15-19.30.21:462][362]LogReferenceChain:   BP_GameLobbyWidget_C /Engine/Transient.FenrisGameEngine_0:FenrisLocalPlayer_0.BP_GameLobbyWidget_C_0->CallFunc_GetGameState_ReturnValue
[2014.09.15-19.30.21:463][362]LogReferenceChain:     GameState /Game/Maps/GameLobby.GameLobby:PersistentLevel.GameState_1->Property
[2014.09.15-19.30.21:463][362]LogReferenceChain:       Level /Game/Maps/GameLobby.GameLobby:PersistentLevel->OwningWorld
[2014.09.15-19.30.21:463][362]LogReferenceChain:         (target) World /Game/Maps/GameLobby.GameLobby
[2014.09.15-19.30.21:531][362]LogLoad:    (Object is not currently rooted)

[2014.09.15-19.30.21:532][362]LogWindows:Error: appError called: World /Game/Maps/GameLobby.GameLobby not cleaned up by garbage collection! (Object is not currently rooted)

I tracked down this bug. The problem is that when ServerTravel causes the map change on the client, it triggers an assert because the root UMG Widget is not destroyable.

To workaround, I override APlayerController::PreClientTravel to broadcast an event to the blueprint. In the blueprint handler I remove the UMG Widget, which allows it to be garbage collected and everything seems ok.

I also found this dupe:
https://answers.unrealengine.com/questions/84838/undefined.html

Hey cgrebeld-

It appears that you were able to fix the problem you were having. I just wanted to check that you haven’t had this issue reoccur.

Cheers