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:
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 extern.h $NHDT-Date: 1637992233 2021/11/27 05:50:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1018 $ */
|
/* NetHack 3.7 extern.h $NHDT-Date: 1644524039 2022/02/10 20:13:59 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1046 $ */
|
||||||
/* Copyright (c) Steve Creps, 1988. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -28,6 +28,9 @@ extern void welcome(boolean);
|
|||||||
extern int argcheck(int, char **, enum earlyarg);
|
extern int argcheck(int, char **, enum earlyarg);
|
||||||
extern long timet_to_seconds(time_t);
|
extern long timet_to_seconds(time_t);
|
||||||
extern long timet_delta(time_t, time_t);
|
extern long timet_delta(time_t, time_t);
|
||||||
|
#ifndef NODUMPENUMS
|
||||||
|
extern void dump_enums(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ### apply.c ### */
|
/* ### apply.c ### */
|
||||||
|
|
||||||
@@ -1246,9 +1249,7 @@ extern int buzzmu(struct monst *, struct attack *);
|
|||||||
|
|
||||||
extern void runtime_info_init(void);
|
extern void runtime_info_init(void);
|
||||||
extern const char *do_runtime_info(int *);
|
extern const char *do_runtime_info(int *);
|
||||||
#ifndef NODUMPENUMS
|
extern void release_runtime_info(void);
|
||||||
extern void dump_enums(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ### mhitm.c ### */
|
/* ### mhitm.c ### */
|
||||||
|
|
||||||
|
|||||||
12
src/date.c
12
src/date.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 date.c $NHDT-Date: 1639622347 2021/12/16 02:39:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.0 $ */
|
/* NetHack 3.7 date.c $NHDT-Date: 1644524054 2022/02/10 20:14:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ */
|
||||||
/* Copyright (c) Michael Allison, 2021. */
|
/* Copyright (c) Michael Allison, 2021. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -139,6 +139,16 @@ free_nomakedefs(void)
|
|||||||
if (nomakedefs.copyright_banner_c)
|
if (nomakedefs.copyright_banner_c)
|
||||||
free((genericptr_t) nomakedefs.copyright_banner_c),
|
free((genericptr_t) nomakedefs.copyright_banner_c),
|
||||||
nomakedefs.copyright_banner_c = 0;
|
nomakedefs.copyright_banner_c = 0;
|
||||||
|
#ifdef NETHACK_GIT_SHA
|
||||||
|
if (nomakedefs.git_sha)
|
||||||
|
free((genericptr_t) nomakedefs.git_sha),
|
||||||
|
nomakedefs.git_sha = 0;
|
||||||
|
#endif
|
||||||
|
#ifdef NETHACK_GIT_BRANCH
|
||||||
|
if (nomakedefs.git_branch)
|
||||||
|
free((genericptr_t) nomakedefs.git_branch),
|
||||||
|
nomakedefs.git_branch = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __DATE__ && __TIME__ */
|
#endif /* __DATE__ && __TIME__ */
|
||||||
|
|||||||
18
src/end.c
18
src/end.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 end.c $NHDT-Date: 1621380392 2021/05/18 23:26:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.225 $ */
|
/* NetHack 3.7 end.c $NHDT-Date: 1644524059 2022/02/10 20:14:19 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.235 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -746,8 +746,9 @@ dump_plines(void)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static void
|
static void
|
||||||
dump_everything(int how,
|
dump_everything(
|
||||||
time_t when) /* date+time at end of game */
|
int how, /* ASCENDED, ESCAPED, QUIT, etc */
|
||||||
|
time_t when) /* date+time at end of game */
|
||||||
{
|
{
|
||||||
#ifdef DUMPLOG
|
#ifdef DUMPLOG
|
||||||
char pbuf[BUFSZ], datetimebuf[24]; /* [24]: room for 64-bit bogus value */
|
char pbuf[BUFSZ], datetimebuf[24]; /* [24]: room for 64-bit bogus value */
|
||||||
@@ -778,11 +779,11 @@ dump_everything(int how,
|
|||||||
putstr(0, 0, "");
|
putstr(0, 0, "");
|
||||||
|
|
||||||
/* character name and basic role info */
|
/* character name and basic role info */
|
||||||
Sprintf(pbuf, "%s, %s %s %s %s", g.plname,
|
Sprintf(pbuf, "%s, %s %s %s %s",
|
||||||
aligns[1 - u.ualign.type].adj,
|
g.plname, aligns[1 - u.ualign.type].adj,
|
||||||
genders[flags.female].adj,
|
genders[flags.female].adj, g.urace.adj,
|
||||||
g.urace.adj,
|
(flags.female && g.urole.name.f) ? g.urole.name.f
|
||||||
(flags.female && g.urole.name.f) ? g.urole.name.f : g.urole.name.m);
|
: g.urole.name.m);
|
||||||
putstr(0, 0, pbuf);
|
putstr(0, 0, pbuf);
|
||||||
putstr(0, 0, "");
|
putstr(0, 0, "");
|
||||||
|
|
||||||
@@ -1776,7 +1777,6 @@ nh_terminate(int status)
|
|||||||
dlb_cleanup();
|
dlb_cleanup();
|
||||||
l_nhcore_done();
|
l_nhcore_done();
|
||||||
}
|
}
|
||||||
free_nomakedefs();
|
|
||||||
|
|
||||||
#ifdef VMS
|
#ifdef VMS
|
||||||
/*
|
/*
|
||||||
|
|||||||
23
src/mdlib.c
23
src/mdlib.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 mdlib.c $NHDT-Date: 1608933420 2020/12/25 21:57:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.17 $ */
|
/* NetHack 3.7 mdlib.c $NHDT-Date: 1644524060 2022/02/10 20:14:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.27 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
|
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
|
||||||
/* Copyright (c) M. Stephenson, 1990, 1991. */
|
/* Copyright (c) M. Stephenson, 1990, 1991. */
|
||||||
@@ -78,12 +78,15 @@ extern int GUILaunched;
|
|||||||
/* these are in extern.h but we don't include hack.h */
|
/* these are in extern.h but we don't include hack.h */
|
||||||
void runtime_info_init(void);
|
void runtime_info_init(void);
|
||||||
const char *do_runtime_info(int *);
|
const char *do_runtime_info(int *);
|
||||||
|
void release_runtime_info(void);
|
||||||
void populate_nomakedefs(struct version_info *);
|
void populate_nomakedefs(struct version_info *);
|
||||||
|
extern void free_nomakedefs(void); /* date.c */
|
||||||
|
|
||||||
void build_options(void);
|
void build_options(void);
|
||||||
static int count_and_validate_winopts(void);
|
static int count_and_validate_winopts(void);
|
||||||
static void opt_out_words(char *, int *);
|
static void opt_out_words(char *, int *);
|
||||||
static void build_savebones_compat_string(void);
|
static void build_savebones_compat_string(void);
|
||||||
|
|
||||||
static int idxopttext, done_runtime_opt_init_once = 0;
|
static int idxopttext, done_runtime_opt_init_once = 0;
|
||||||
#define MAXOPT 40
|
#define MAXOPT 40
|
||||||
static char *opttext[120] = { 0 };
|
static char *opttext[120] = { 0 };
|
||||||
@@ -626,8 +629,9 @@ count_and_validate_winopts(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
opt_out_words(char *str, /* input, but modified during processing */
|
opt_out_words(
|
||||||
int *length_p) /* in/out */
|
char *str, /* input, but modified during processing */
|
||||||
|
int *length_p) /* in/out */
|
||||||
{
|
{
|
||||||
char *word;
|
char *word;
|
||||||
|
|
||||||
@@ -645,7 +649,7 @@ opt_out_words(char *str, /* input, but modified during processing */
|
|||||||
if (idxopttext < (MAXOPT - 1))
|
if (idxopttext < (MAXOPT - 1))
|
||||||
idxopttext++;
|
idxopttext++;
|
||||||
Sprintf(optbuf, "%s", opt_indent),
|
Sprintf(optbuf, "%s", opt_indent),
|
||||||
*length_p = (int) strlen(opt_indent);
|
*length_p = (int) strlen(opt_indent);
|
||||||
} else {
|
} else {
|
||||||
Sprintf(eos(optbuf), " "), (*length_p)++;
|
Sprintf(eos(optbuf), " "), (*length_p)++;
|
||||||
}
|
}
|
||||||
@@ -834,4 +838,15 @@ do_runtime_info(int *rtcontext)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
release_runtime_info()
|
||||||
|
{
|
||||||
|
while (idxopttext > 0) {
|
||||||
|
--idxopttext;
|
||||||
|
free((genericptr_t) opttext[idxopttext]), opttext[idxopttext] = 0;
|
||||||
|
}
|
||||||
|
done_runtime_opt_init_once = 0;
|
||||||
|
free_nomakedefs();
|
||||||
|
}
|
||||||
|
|
||||||
/*mdlib.c*/
|
/*mdlib.c*/
|
||||||
|
|||||||
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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2009. */
|
/*-Copyright (c) Michael Allison, 2009. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -229,7 +229,7 @@ dosave0(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
save_gamelog(NHFILE* nhfp)
|
save_gamelog(NHFILE *nhfp)
|
||||||
{
|
{
|
||||||
struct gamelog_line *tmp = g.gamelog, *tmp2;
|
struct gamelog_line *tmp = g.gamelog, *tmp2;
|
||||||
int slen;
|
int slen;
|
||||||
@@ -239,9 +239,10 @@ save_gamelog(NHFILE* nhfp)
|
|||||||
if (perform_bwrite(nhfp)) {
|
if (perform_bwrite(nhfp)) {
|
||||||
if (nhfp->structlevel) {
|
if (nhfp->structlevel) {
|
||||||
slen = strlen(tmp->text);
|
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->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)) {
|
if (release_data(nhfp)) {
|
||||||
@@ -253,7 +254,7 @@ save_gamelog(NHFILE* nhfp)
|
|||||||
if (perform_bwrite(nhfp)) {
|
if (perform_bwrite(nhfp)) {
|
||||||
if (nhfp->structlevel) {
|
if (nhfp->structlevel) {
|
||||||
slen = -1;
|
slen = -1;
|
||||||
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof(slen));
|
bwrite(nhfp->fd, (genericptr_t) &slen, sizeof slen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (release_data(nhfp))
|
if (release_data(nhfp))
|
||||||
@@ -1090,6 +1091,7 @@ freedynamicdata(void)
|
|||||||
#define free_timers(R) save_timers(&tnhfp, R)
|
#define free_timers(R) save_timers(&tnhfp, R)
|
||||||
#define free_light_sources(R) save_light_sources(&tnhfp, R)
|
#define free_light_sources(R) save_light_sources(&tnhfp, R)
|
||||||
#define free_animals() mon_animal_list(FALSE)
|
#define free_animals() mon_animal_list(FALSE)
|
||||||
|
#define discard_gamelog() save_gamelog(&tnhfp);
|
||||||
|
|
||||||
/* move-specific data */
|
/* move-specific data */
|
||||||
dmonsfree(); /* release dead monsters */
|
dmonsfree(); /* release dead monsters */
|
||||||
@@ -1137,13 +1139,15 @@ freedynamicdata(void)
|
|||||||
#ifdef USER_SOUNDS
|
#ifdef USER_SOUNDS
|
||||||
release_sound_mappings();
|
release_sound_mappings();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DUMPLOG
|
||||||
|
dumplogfreemessages();
|
||||||
|
#endif
|
||||||
|
discard_gamelog();
|
||||||
|
release_runtime_info(); /* build-time options and version stuff */
|
||||||
#endif /* FREE_ALL_MEMORY */
|
#endif /* FREE_ALL_MEMORY */
|
||||||
|
|
||||||
if (VIA_WINDOWPORT())
|
if (VIA_WINDOWPORT())
|
||||||
status_finish();
|
status_finish();
|
||||||
#ifdef DUMPLOG
|
|
||||||
dumplogfreemessages();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* last, because it frees data that might be used by panic() to provide
|
/* last, because it frees data that might be used by panic() to provide
|
||||||
feedback to the user; conceivably other freeing might trigger panic */
|
feedback to the user; conceivably other freeing might trigger panic */
|
||||||
|
|||||||
Reference in New Issue
Block a user