Hello …
What you are experiencing is our garbage collection “protection” code triggering because world that client was in prior to joining your new server world is still in memory when we expect it not to be.
First things first… server code indicating a connection is accurate, handshaking/connection has finished and server is telling client where to go AFTER those log messages.
client is attempting to load server’s request and after it has successfully done so it marks everything in old level for GC and does GC. After that we check if old world is still reachable via any “rooted” UObjects. In this case we found that UWorld is still accessible and therefore still in memory. We assert and try to figure out what object(s) are still referencing old world.
In this case something on your player controller is still referencing old world, either directly or indirectly.
[2014.10.12-13.46.29:491][318]LogReferenceChain: GalaxyFriendsListUMG_C /Game/Maps/Disabled_Shark_Int.Disabled_Shark_Int:PersistentLevel.BP_FPS_PlayerController_C_0.GalaxyFriendsListUMG_C_0->Property
[2014.10.12-13.46.29:492][318]LogReferenceChain: (PendingKill) BP_FPS_PlayerController_C /Game/Maps/Disabled_Shark_Int.Disabled_Shark_Int:PersistentLevel.BP_FPS_PlayerController_C_0->Property
The “Property”, in my understanding, is some UPROPERTY() marked member variable on that class (probably GalaxyFriendsListUMG_C). It is possible that this member variable is ours (on APlayerController) or yours (on BP_FPS_PlayerController).
Can you take a look at some of UObjects/AActors that player controller might be referencing and see if any hold onto UWorld in any way? Simply clearing/destroying/cleaning up some of these pointers in “PreClientTravel” or another “about to leave this level” type locations might unhitch connection and allow GC to proceed successfully. I don’t know what GalaxyFriendsListUMG_C is, but you might consider looking at this object and its relationship to controller/world as well. My guess is it is this object and one of its references.
If this isn’t immediately helpful I’ll enlist some of our GC experts on it.
PlayerControllers are fickle beasts, they have many special exceptions when it comes to destruction and level loading, so what they reference and hold onto can cause this unlike say level actors that usually reference things within world alone and don’t have graph dependency issues.