From ce8886d38fe71943aa72c819e7c22f11d3f5debc Mon Sep 17 00:00:00 2001
From: John FrostFox <john.frostfox@gmail.com>
Date: Mon, 11 Oct 2021 09:40:43 +0300
Subject: [PATCH] Fix crash when loading a level mid-game

---
 src/d_clisrv.c    | 2 +-
 src/d_netcmd.c    | 2 ++
 src/p_savenetrb.c | 6 +++---
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 519dec570..4fa8150df 100755
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -5079,7 +5079,7 @@ void TryRunTics(tic_t realtics, tic_t entertic)
 	netUpdateFudge = (((double)SDL_GetPerformanceCounter() / tic_frequency) - frame); // record the timefudge where the net update typically occurs
 
 	//TODO SPLITSCREEN PLAYER
-	ticcmd_t latestLocalCmd = localcmds;
+	// ticcmd_t latestLocalCmd = localcmds;
 
 	NetUpdate();
 
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 752175111..76d145b7c 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -2189,6 +2189,8 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
 		return;
 	}
 
+	InvalidateSavestates();
+
 	if (chmappending)
 		chmappending--;
 
diff --git a/src/p_savenetrb.c b/src/p_savenetrb.c
index ff536d0f3..8706ea1d5 100755
--- a/src/p_savenetrb.c
+++ b/src/p_savenetrb.c
@@ -5774,8 +5774,8 @@ static inline boolean P_UnArchiveLuabanksAndConsistency(void)
 
 void P_GameStateFreeMemory(savestate_t* savestate)
 {
-	if (gamestate != GS_LEVEL)
-		Z_Free(savestate->buffer);
+	// if (gamestate != GS_LEVEL)
+	Z_Free(savestate->buffer);
 	savestate->buffer = NULL; //a hacky way to invalidate the memory
 }
 
@@ -5867,7 +5867,7 @@ boolean P_LoadGameState(const savestate_t* savestate)
 	if (savedGameMap != gamemap)
 	{
 		// savestates do not work cross-level
-		save_p = NULL; //invalidate it
+		// save_p = NULL; //invalidate it //FUCK
 		return false;
 	}
 
-- 
GitLab