freeing objects and monsters

Making the zeroing out of memory used by an object that is about to
be freed unconditional, and do the same for monsters.  Should never
matter aside from an undetectable amount of extra overhead.
This commit is contained in:
PatR
2023-03-29 15:18:25 -07:00
parent dad67436e6
commit cc2410e349
2 changed files with 19 additions and 15 deletions

View File

@@ -97,11 +97,11 @@ dealloc_oextra(struct obj *o)
if (x) {
if (x->oname)
free((genericptr_t) x->oname);
free((genericptr_t) x->oname), x->oname = 0;
if (x->omonst)
free_omonst(o); /* 'o' rather than 'x' */
free_omonst(o); /* note: pass 'o' rather than 'x' */
if (x->omailcmd)
free((genericptr_t) x->omailcmd);
free((genericptr_t) x->omailcmd), x->omailcmd = 0;
free((genericptr_t) x);
o->oextra = (struct oextra *) 0;
@@ -2635,12 +2635,13 @@ dealloc_obj(struct obj *obj)
obj->where = OBJ_LUAFREE;
return;
}
#ifdef DEBUG
/* clobber out of date information contained in the about-to-become
stale memory; do this before 'free()' in case a debugging malloc
implementation overwrites the memory with something else */
/* clear out of date information contained in the about-to-become
stale memory so that potential used-after-freed bugs (should never
happen) might trigger an object lost panic instead of continuing;
linking with a debugging malloc library is likely to do something
similar so this is mainly useful for ordinary malloc/free */
*obj = cg.zeroobj;
#endif
free((genericptr_t) obj);
}

View File

@@ -2364,18 +2364,18 @@ dealloc_mextra(struct monst* m)
if (x) {
if (x->mgivenname)
free((genericptr_t) x->mgivenname);
free((genericptr_t) x->mgivenname), x->mgivenname = 0;
if (x->egd)
free((genericptr_t) x->egd);
free((genericptr_t) x->egd), x->egd = 0;
if (x->epri)
free((genericptr_t) x->epri);
free((genericptr_t) x->epri), x->epri = 0;
if (x->eshk)
free((genericptr_t) x->eshk);
free((genericptr_t) x->eshk), x->eshk = 0;
if (x->emin)
free((genericptr_t) x->emin);
free((genericptr_t) x->emin), x->emin = 0;
if (x->edog)
free((genericptr_t) x->edog);
/* [no action needed for x->mcorpsenm] */
free((genericptr_t) x->edog), x->edog = 0;
x->mcorpsenm = NON_PM; /* no allocation to release */
free((genericptr_t) x);
m->mextra = (struct mextra *) 0;
@@ -2394,6 +2394,9 @@ dealloc_monst(struct monst *mon)
}
if (mon->mextra)
dealloc_mextra(mon);
/* clear out of date information contained in the about-to-become
stale memory; see dealloc_obj() */
*mon = cg.zeromonst;
free((genericptr_t) mon);
}