Fix Initialization in AcknowledgePossession, possible race condition #78
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
After a lot of debugging, I found that there is a possible race condition during bad network conditions (~200ms, 5% packet loss) with 5%~10% of repro chances.
If this happens, ASC will not be initialized properly and you will get
LogAbilitySystem: Warning: Can't activate LocalOnly or LocalPredicted ability %s when not local!
This happens because during
AcknowledgePossession
, the pawn controller is not setup yet, and duringFGameplayAbilityActorInfo::InitFromActor
,PlayerController
will be null forever, and then, when callingUAbilitySystemComponent::InternalTryActivateAbility
,bool bIsLocal = AbilityActorInfo->IsLocallyControlled()
will be falseI consider that
OnRep_Pawn
is a good place to callRefreshAbilityActorInfo
, that will callFGameplayAbilityActorInfo::InitFromActor
again, but the controller will be valid at that point.