Extra checks when freeing objects and monsters

Just in case, so we don't leave objects or monsters inaccessible
by accident.
This commit is contained in:
Pasi Kallinen
2015-10-11 21:41:55 +03:00
parent f0220c4203
commit 05adaa2a75
3 changed files with 10 additions and 0 deletions
+4
View File
@@ -1943,6 +1943,10 @@ struct obj *obj;
{ {
if (obj->where != OBJ_FREE) if (obj->where != OBJ_FREE)
panic("dealloc_obj: obj not free"); panic("dealloc_obj: obj not free");
if (obj->nobj)
panic("dealloc_obj with nobj");
if (obj->cobj)
panic("dealloc_obj with cobj");
/* free up any timers attached to the object */ /* free up any timers attached to the object */
if (obj->timed) if (obj->timed)
+3
View File
@@ -1426,6 +1426,7 @@ dmonsfree()
freetmp = *mtmp; freetmp = *mtmp;
if (freetmp->mhp <= 0 && !freetmp->isgd) { if (freetmp->mhp <= 0 && !freetmp->isgd) {
*mtmp = freetmp->nmon; *mtmp = freetmp->nmon;
freetmp->nmon = NULL;
dealloc_monst(freetmp); dealloc_monst(freetmp);
count++; count++;
} else } else
@@ -1603,6 +1604,8 @@ void
dealloc_monst(mon) dealloc_monst(mon)
struct monst *mon; struct monst *mon;
{ {
if (mon->nmon)
panic("dealloc_monst with nmon");
if (mon->mextra) if (mon->mextra)
dealloc_mextra(mon->mextra); dealloc_mextra(mon->mextra);
free((genericptr_t) mon); free((genericptr_t) mon);
+3
View File
@@ -1051,6 +1051,8 @@ register struct obj *otmp;
context.spbook.book = (struct obj *) 0; context.spbook.book = (struct obj *) 0;
} }
otmp->where = OBJ_FREE; /* set to free so dealloc will work */ otmp->where = OBJ_FREE; /* set to free so dealloc will work */
otmp->nobj = NULL; /* nobj saved into otmp2 */
otmp->cobj = NULL; /* contents handled above */
otmp->timed = 0; /* not timed any more */ otmp->timed = 0; /* not timed any more */
otmp->lamplit = 0; /* caller handled lights */ otmp->lamplit = 0; /* caller handled lights */
dealloc_obj(otmp); dealloc_obj(otmp);
@@ -1149,6 +1151,7 @@ register struct monst *mtmp;
context.polearm.m_id = mtmp->m_id; context.polearm.m_id = mtmp->m_id;
context.polearm.hitmon = NULL; context.polearm.hitmon = NULL;
} }
mtmp->nmon = NULL; /* nmon saved into mtmp2 */
dealloc_monst(mtmp); dealloc_monst(mtmp);
} }
mtmp = mtmp2; mtmp = mtmp2;