mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 04:22:34 +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
|
else
|
||||||
{
|
{
|
||||||
assert(0 && "Pointer points to a type we don't handle");
|
I_Error("Attempt to save pointer to unhandled type %s", PointedType->DescriptiveName());
|
||||||
I_Error("Attempt to save pointer to unhandled type");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2270,7 +2270,29 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
I_FreezeTime(true);
|
I_FreezeTime(true);
|
||||||
|
|
||||||
insave = true;
|
insave = true;
|
||||||
G_SnapshotLevel ();
|
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;
|
BufferWriter savepic;
|
||||||
FSerializer savegameinfo; // this is for displayable info about the savegame
|
FSerializer savegameinfo; // this is for displayable info about the savegame
|
||||||
|
|
Loading…
Reference in a new issue