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:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user