Description

ULocalPlayerSaveGame::AsyncSaveGameToSlotForLocalPlayer was designed to properly support multiple in flight requests at the same time, but the current code does not work correctly and this can cause an ensure if two saves are requested at the same time. The issue is that ProcessSaveComplete does not use the SaveRequest variable it is passed and instead uses the CurrentSaveRequest which might be out of date when processing the first save completion. The behavior appears to work correctly, other than that it fires an ensure and may cause confusion if a failure happens right after a success.

One reasonable fix is to change the setting of LastSuccessful/ErrorSaveRequest to use SaveRequest instead of CurrentSaveRequest:

if (bSuccess)
{
	ensure(CurrentSaveRequest > LastSuccessfulSaveRequest);
	LastSuccessfulSaveRequest = SaveRequest;
}
else
{
	ensure(CurrentSaveRequest > LastErrorSaveRequest);
	LastErrorSaveRequest = SaveRequest;
}
Steps to Reproduce

General repro from external customer:

  1. Perform 2 ULocalPlayerSaveGame::AsyncSaveGameToSlotForLocalPlayer any complete
  2. First async request: CurrentSaveRequest becomes 1
  3. Second async request: CurrentSaveRequest becomes 2
  4. First async load completes
  5. LastSuccessfulSaveRequest becomes CurrentSaveRequest which is 2
  6. Second async load completes
  7. ensure trips ensure(CurrentSaveRequest > LastSuccessfulSaveRequest); since the current save request was already assigned to LastSaveRequest

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-353812 in the post.

0
Login to Vote

Unresolved
ComponentUE - Gameplay
Affects Versions5.7
Target Fix5.8
CreatedNov 14, 2025
UpdatedNov 14, 2025
View Jira Issue