Description

I've noticed the issue occurring in both 4.20.3 (CL 4369336) and 4.21.0 (CL 4541578). The user on AnswerHub has also noticed the issue in 4.20.2 (CL unknown) and claims the issue did not occur in 4.17.2 (CL unknown).

From the AnswerHub post:

My logs are littered with PostReceivedBunch: Object == NULL messages. After a couple days of debugging, I've narrowed it down to only occurring on GameplayTasks (any ability task derived from AbilityTask_ApplyRootMotion_Base) that are simulated (bSimulatedTask = true).

It appears that that these tasks are never removed from the ReplicationMap of the simulating client's UActorChannel. As expected, every time these tasks are called, it adds a new replicator to the channel's ReplicationMap via FindOrCreateReplicator(). So what ends up happening is PostReceivedBunch() gets called on all the non removed replicators which have a null ObjectPtr property, thus trigger the PostReceivedBunch: Object == NULL message.

Steps to Reproduce
  1. Download the attached example project
  2. Compile and run with DebugGame Editor
  3. In PIE, launch with 2+ players and with a dedicated server
  4. Let run for about a minute
  5. Add a breakpoint in UActorChannel::FindOrCreateReplicator where a new object replicator is added to the replication map
  6. Continue hitting breakpoint until ReplicationMap size is greater than two
  7. Inspect contents of ReplicationMap
  8. Let run longer and continue steps 5-7 if desired

Result: Entries will contain a stale key (as noted by 4.21 natvis for Visual Studio) and null object pointer for ability tasks.

Expected result: Entries that are stale and null would be removed.

Have Comments or More Details?

Head over to the existing Questions & Answers thread and let us know what's up.

1
Login to Vote

Fixed
ComponentUE - Networking
Affects Versions4.204.21
Target Fix4.22
Fix Commit4665425
Main Commit4804559
Release Commit4862694
CreatedNov 20, 2018
ResolvedJan 3, 2019
UpdatedSep 9, 2021