mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 07:12:02 +00:00
- fixed: When the savegame code errors out, some cleanup is required in G_DoSaveGame.
This commit is contained in:
parent
7736e42740
commit
217bcb847d
2 changed files with 24 additions and 3 deletions
|
@ -1398,8 +1398,7 @@ void PPointer::WriteValue(FSerializer &ar, const char *key,const void *addr) con
|
|||
}
|
||||
else
|
||||
{
|
||||
assert(0 && "Pointer points to a type we don't handle");
|
||||
I_Error("Attempt to save pointer to unhandled type");
|
||||
I_Error("Attempt to save pointer to unhandled type %s", PointedType->DescriptiveName());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2270,7 +2270,29 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
|||
I_FreezeTime(true);
|
||||
|
||||
insave = true;
|
||||
try
|
||||
{
|
||||
G_SnapshotLevel();
|
||||
}
|
||||
catch(CRecoverableError &err)
|
||||
{
|
||||
// delete the snapshot. Since the save failed it is broken.
|
||||
insave = false;
|
||||
level.info->Snapshot.Clean();
|
||||
Printf(PRINT_HIGH, "Save failed\n");
|
||||
Printf(PRINT_HIGH, "%s\n", err.GetMessage());
|
||||
// The time freeze must be reset if the save fails.
|
||||
if (cl_waitforsave)
|
||||
I_FreezeTime(false);
|
||||
return;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
insave = false;
|
||||
if (cl_waitforsave)
|
||||
I_FreezeTime(false);
|
||||
throw;
|
||||
}
|
||||
|
||||
BufferWriter savepic;
|
||||
FSerializer savegameinfo; // this is for displayable info about the savegame
|
||||
|
|
Loading…
Reference in a new issue