memory tracking fix
'heaputil' is producing a lot of complaints. This fixes one of them, about freeing memory that was never allocated. In this case, it's when removing an overview annotation for a level. The annotation is using dupstr_n() and not being recorded due to dupstr_n() being placed after MONITOR_HEAP undefines the macro that overrides alloc(). There's only one use of dupstr_n(), and its length checking isn't needed there, so just switch to dupstr() and comment out the implementation of dupstr_n(). I left the prototype in extern.h; that's harmless. If dupstr_n() needs to be resurrected, a second MONITOR_HEAP-aware version should be implemented, with corresponding macro to choose which one to use.
This commit is contained in:
@@ -2554,7 +2554,9 @@ query_annotation(d_level *lev)
|
||||
/* add new annotation, unless it's all spaces (which will be an
|
||||
empty string after mungspaces() above) */
|
||||
if (*nbuf && strcmp(nbuf, " ")) {
|
||||
mptr->custom = dupstr_n(nbuf,&mptr->custom_lth);
|
||||
mptr->custom = dupstr(nbuf);
|
||||
/* _lth field does not include trailing '\0' in the count */
|
||||
mptr->custom_lth = (unsigned) strlen(mptr->custom);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2668,27 +2670,24 @@ rm_mapseen(int ledger_num)
|
||||
if (svd.dungeons[mptr->lev.dnum].ledger_start + mptr->lev.dlevel
|
||||
== ledger_num)
|
||||
break;
|
||||
|
||||
if (!mptr)
|
||||
return;
|
||||
|
||||
if (mptr->custom)
|
||||
free((genericptr_t) mptr->custom);
|
||||
free((genericptr_t) mptr->custom), mptr->custom = (char *) NULL;
|
||||
|
||||
bp = mptr->final_resting_place;
|
||||
while (bp) {
|
||||
bpnext = mptr->final_resting_place;
|
||||
while ((bp = bpnext) != NULL) {
|
||||
bpnext = bp->next;
|
||||
free(bp);
|
||||
bp = bpnext;
|
||||
free((genericptr_t) bp);
|
||||
}
|
||||
|
||||
if (mprev) {
|
||||
mprev->next = mptr->next;
|
||||
free(mptr);
|
||||
} else {
|
||||
svm.mapseenchn = mptr->next;
|
||||
free(mptr);
|
||||
}
|
||||
free(mptr);
|
||||
}
|
||||
|
||||
staticfn void
|
||||
|
||||
Reference in New Issue
Block a user