From a02fbacf01a0f3eb0c9bca840d2eca9ce489004c Mon Sep 17 00:00:00 2001 From: NepDisk Date: Fri, 12 Sep 2025 12:39:48 -0400 Subject: [PATCH] Fix resync crash --- src/p_mobj.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index f2a90c10f..65b80a432 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11733,9 +11733,9 @@ void P_FreePrecipMobj(precipmobj_t *mobj) // Clearing out stuff for savegames void P_RemoveSavegameMobj(mobj_t *mobj) { - // unlink from sector and block lists if (((thinker_t *)mobj)->function.acp1 == (actionf_p1)P_NullPrecipThinker) { + // unlink from sector and block lists P_UnsetPrecipThingPosition((precipmobj_t *)mobj); if (precipsector_list) @@ -11758,20 +11758,18 @@ void P_RemoveSavegameMobj(mobj_t *mobj) P_DelSeclist(sector_list); sector_list = NULL; } + + P_DeleteMobjStringArgs(mobj); } // stop any playing sound S_StopSound(mobj); - R_RemoveMobjInterpolator(mobj); - P_DeleteMobjStringArgs(mobj); + R_RemoveMobjInterpolator(mobj); + + // free block // 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; - Z_Free(thinker); - } + P_UnlinkThinker((thinker_t*)mobj); } static CV_PossibleValue_t respawnitemtime_cons_t[] = {{1, "MIN"}, {300, "MAX"}, {0, NULL}};