From c24a0d0a47c92670fe51fcb08fab7b50a55e0966 Mon Sep 17 00:00:00 2001
From: Ashnal <ashnal52@gmail.com>
Date: Thu, 29 Sep 2022 15:43:50 -0400
Subject: [PATCH] Remove usage of currentthinker from direct removal It's
 designed to be referenced from P_RunTHinkers, whjich we aren't doing

---
 src/p_mobj.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/p_mobj.c b/src/p_mobj.c
index befcf04f9..b2a9b09b5 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -10323,10 +10323,17 @@ void P_RemoveSavegameMobj(mobj_t *mobj)
 
 	// stop any playing sound
 	S_StopSound(mobj);
+	R_RemoveMobjInterpolator(mobj);
 
 	// free block
-	P_RemoveThinkerDelayed((thinker_t *)mobj); // Call directly here since we are calling P_InitThinkers
-	R_RemoveMobjInterpolator(mobj);
+	// Here we use the same code as R_RemoveThinkerDelayed, but without reference counting (we're removing everything so it shouldn't matter) and without touching currentthinker since we aren't in P_RunThinkers
+	{
+		thinker_t *thinker = (thinker_t *)mobj;
+		thinker_t *next = thinker->next;
+		(next->prev = thinker->prev)->next = next;
+		R_DestroyLevelInterpolators(thinker);
+		Z_Free(thinker);
+	}
 }
 
 static CV_PossibleValue_t respawnitemtime_cons_t[] = {{1, "MIN"}, {300, "MAX"}, {0, NULL}};
-- 
GitLab