diff --git a/include/decl.h b/include/decl.h index 9859c3e24..fb444cbf6 100644 --- a/include/decl.h +++ b/include/decl.h @@ -342,7 +342,7 @@ struct instance_globals_d { /* new */ boolean deferred_showpaths; - const char *deferred_showpaths_dir; + char *deferred_showpaths_dir; boolean havestate; unsigned long magic; /* validate that structure layout is preserved */ diff --git a/src/files.c b/src/files.c index 8a23a0175..0d36deaa3 100644 --- a/src/files.c +++ b/src/files.c @@ -4482,12 +4482,19 @@ do_deferred_showpaths(int code) gd.deferred_showpaths = FALSE; reveal_paths(code); + /* cleanup before heading to an exit */ + freedynamicdata(); + dlb_cleanup(); + l_nhcore_done(); + #ifdef UNIX after_opt_showpaths(gd.deferred_showpaths_dir); #else +#ifndef WIN32 #ifdef CHDIR chdirx(gd.deferred_showpaths_dir, 0); #endif +#endif #if defined(WIN32) || defined(MICRO) || defined(OS2) nethack_exit(EXIT_SUCCESS); #else diff --git a/src/save.c b/src/save.c index 1497c4d5b..933a0b0f8 100644 --- a/src/save.c +++ b/src/save.c @@ -1278,6 +1278,9 @@ freedynamicdata(void) if (options_set_window_colors_flag) options_free_window_colors(); + if (glyphid_cache_status()) + free_glyphid_cache(); + /* last, because it frees data that might be used by panic() to provide feedback to the user; conceivably other freeing might trigger panic */ sysopt_release(); /* SYSCF strings */