memory management
MONITOR_HEAP+heaputil pointed out some unreleased memory. The livelog stuff wasn't being freed. Not surpringly the data used for collecting and formatting build-options that just got changed from strdup() to dupstr() wasn't being freed. And a couple of date/version bits.
This commit is contained in:
20
src/save.c
20
src/save.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 save.c $NHDT-Date: 1606949327 2020/12/02 22:48:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.164 $ */
|
||||
/* NetHack 3.7 save.c $NHDT-Date: 1644524061 2022/02/10 20:14:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.181 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2009. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -229,7 +229,7 @@ dosave0(void)
|
||||
}
|
||||
|
||||
static void
|
||||
save_gamelog(NHFILE* nhfp)
|
||||
save_gamelog(NHFILE *nhfp)
|
||||
{
|
||||
struct gamelog_line *tmp = g.gamelog, *tmp2;
|
||||
int slen;
|
||||
@@ -239,9 +239,10 @@ save_gamelog(NHFILE* nhfp)
|
||||
if (perform_bwrite(nhfp)) {
|
||||
if (nhfp->structlevel) {
|
||||
slen = strlen(tmp->text);
|
||||
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof(slen));
|
||||
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof slen);
|
||||
bwrite(nhfp->fd, (genericptr_t) tmp->text, slen);
|
||||
bwrite(nhfp->fd, (genericptr_t) tmp, sizeof(struct gamelog_line));
|
||||
bwrite(nhfp->fd, (genericptr_t) tmp,
|
||||
sizeof (struct gamelog_line));
|
||||
}
|
||||
}
|
||||
if (release_data(nhfp)) {
|
||||
@@ -253,7 +254,7 @@ save_gamelog(NHFILE* nhfp)
|
||||
if (perform_bwrite(nhfp)) {
|
||||
if (nhfp->structlevel) {
|
||||
slen = -1;
|
||||
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof(slen));
|
||||
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof slen);
|
||||
}
|
||||
}
|
||||
if (release_data(nhfp))
|
||||
@@ -1090,6 +1091,7 @@ freedynamicdata(void)
|
||||
#define free_timers(R) save_timers(&tnhfp, R)
|
||||
#define free_light_sources(R) save_light_sources(&tnhfp, R)
|
||||
#define free_animals() mon_animal_list(FALSE)
|
||||
#define discard_gamelog() save_gamelog(&tnhfp);
|
||||
|
||||
/* move-specific data */
|
||||
dmonsfree(); /* release dead monsters */
|
||||
@@ -1137,13 +1139,15 @@ freedynamicdata(void)
|
||||
#ifdef USER_SOUNDS
|
||||
release_sound_mappings();
|
||||
#endif
|
||||
#ifdef DUMPLOG
|
||||
dumplogfreemessages();
|
||||
#endif
|
||||
discard_gamelog();
|
||||
release_runtime_info(); /* build-time options and version stuff */
|
||||
#endif /* FREE_ALL_MEMORY */
|
||||
|
||||
if (VIA_WINDOWPORT())
|
||||
status_finish();
|
||||
#ifdef DUMPLOG
|
||||
dumplogfreemessages();
|
||||
#endif
|
||||
|
||||
/* last, because it frees data that might be used by panic() to provide
|
||||
feedback to the user; conceivably other freeing might trigger panic */
|
||||
|
||||
Reference in New Issue
Block a user