]> granicus.if.org Git - nethack/commitdiff
memory management
authorPatR <rankin@nethack.org>
Thu, 10 Feb 2022 20:14:27 +0000 (12:14 -0800)
committerPatR <rankin@nethack.org>
Thu, 10 Feb 2022 20:14:27 +0000 (12:14 -0800)
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.

include/extern.h
src/date.c
src/end.c
src/mdlib.c
src/save.c

index 089db22507123f4c0b7649156a4c0c28f9670a0d..3dfa5573d7a1f629baf532e8ecc131808df2b00a 100644 (file)
@@ -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.                              */
 /* 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 long timet_to_seconds(time_t);
 extern long timet_delta(time_t, time_t);
+#ifndef NODUMPENUMS
+extern void dump_enums(void);
+#endif
 
 /* ### apply.c ### */
 
@@ -1246,9 +1249,7 @@ extern int buzzmu(struct monst *, struct attack *);
 
 extern void runtime_info_init(void);
 extern const char *do_runtime_info(int *);
-#ifndef NODUMPENUMS
-extern void dump_enums(void);
-#endif
+extern void release_runtime_info(void);
 
 /* ### mhitm.c ### */
 
index c6f8acb6919906dd9f1eb68e58dfa49621a7d121..13f6c944579896b5a21c5f87e63e178f1c458f3a 100644 (file)
@@ -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.                           */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -139,6 +139,16 @@ free_nomakedefs(void)
     if (nomakedefs.copyright_banner_c)
         free((genericptr_t) nomakedefs.copyright_banner_c),
             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__ */
index 4ed8d70108f11ac8b08c124caa8c98e8ec30ed7f..d1a327a88034f81dc539bc7eb766b57c35c61746 100644 (file)
--- a/src/end.c
+++ b/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) Robert Patrick Rankin, 2012. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -746,8 +746,9 @@ dump_plines(void)
 
 /*ARGSUSED*/
 static void
-dump_everything(int how,
-                time_t when) /* date+time at end of game */
+dump_everything(
+    int how,     /* ASCENDED, ESCAPED, QUIT, etc */
+    time_t when) /* date+time at end of game */
 {
 #ifdef DUMPLOG
     char pbuf[BUFSZ], datetimebuf[24]; /* [24]: room for 64-bit bogus value */
@@ -778,11 +779,11 @@ dump_everything(int how,
     putstr(0, 0, "");
 
     /* character name and basic role info */
-    Sprintf(pbuf, "%s, %s %s %s %s", g.plname,
-            aligns[1 - u.ualign.type].adj,
-            genders[flags.female].adj,
-            g.urace.adj,
-            (flags.female && g.urole.name.f) ? g.urole.name.f : g.urole.name.m);
+    Sprintf(pbuf, "%s, %s %s %s %s",
+            g.plname, aligns[1 - u.ualign.type].adj,
+            genders[flags.female].adj, g.urace.adj,
+            (flags.female && g.urole.name.f) ? g.urole.name.f
+                                             : g.urole.name.m);
     putstr(0, 0, pbuf);
     putstr(0, 0, "");
 
@@ -1776,7 +1777,6 @@ nh_terminate(int status)
         dlb_cleanup();
         l_nhcore_done();
     }
-    free_nomakedefs();
 
 #ifdef VMS
     /*
index 633d0efe1e7bd69d488cac9463774937723ff0db..1e7613a473af518be1ba6dbb6a9ecee93491d9f9 100644 (file)
@@ -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) Kenneth Lorber, Kensington, Maryland, 2015. */
 /* 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 */
 void runtime_info_init(void);
 const char *do_runtime_info(int *);
+void release_runtime_info(void);
 void populate_nomakedefs(struct version_info *);
+extern void free_nomakedefs(void); /* date.c */
 
 void build_options(void);
 static int count_and_validate_winopts(void);
 static void opt_out_words(char *, int *);
 static void build_savebones_compat_string(void);
+
 static int idxopttext, done_runtime_opt_init_once = 0;
 #define MAXOPT 40
 static char *opttext[120] = { 0 };
@@ -626,8 +629,9 @@ count_and_validate_winopts(void)
 }
 
 static void
-opt_out_words(char *str,     /* input, but modified during processing */
-              int *length_p) /* in/out */
+opt_out_words(
+    char *str,     /* input, but modified during processing */
+    int *length_p) /* in/out */
 {
     char *word;
 
@@ -645,7 +649,7 @@ opt_out_words(char *str,     /* input, but modified during processing */
             if (idxopttext < (MAXOPT - 1))
                 idxopttext++;
             Sprintf(optbuf, "%s", opt_indent),
-                    *length_p = (int) strlen(opt_indent);
+                *length_p = (int) strlen(opt_indent);
         } else {
             Sprintf(eos(optbuf), " "), (*length_p)++;
         }
@@ -834,4 +838,15 @@ do_runtime_info(int *rtcontext)
     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*/
index b957bc24ff670c7a41dbc3c1e06ee7d932133f9d..fc5f81e21279c9f74eba3f5041c9cae2acc9eb68 100644 (file)
@@ -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(NHFILEnhfp)
+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 */