From afc34d30163740313120df4a7b3fa25d6ec7c725 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sat, 8 Dec 2018 22:08:55 -0500 Subject: [PATCH] a late bot() call was observed on GUI Windows so prevent such a crash --- src/botl.c | 3 ++- win/share/safeproc.c | 21 ++++++++++++++++----- win/win32/mswproc.c | 7 +++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/botl.c b/src/botl.c index 2fa84afe0..db96c160b 100644 --- a/src/botl.c +++ b/src/botl.c @@ -234,7 +234,8 @@ do_statusline2() void bot() { - if (youmonst.data && iflags.status_updates) { + /* dosave() flags completion by setting u.uhp to -1 */ + if ((u.uhp != -1) && youmonst.data && iflags.status_updates) { #ifdef STATUS_HILITES bot_via_windowport(); #else diff --git a/win/share/safeproc.c b/win/share/safeproc.c index b3b991a7c..1f268ee16 100644 --- a/win/share/safeproc.c +++ b/win/share/safeproc.c @@ -11,7 +11,7 @@ * assigned to the windowproc function pointers very early * in the startup initialization, perhaps immediately even. * It requires only the following call: - * windowprocs = get_safe_procs(0); + * windowprocs = *get_safe_procs(0); * * The game startup can trigger functions in other modules * that make assumptions on a WindowPort being available @@ -45,12 +45,23 @@ * * The additional platform-independent, but more functional * routines provided in here should be assigned after the - * windowprocs = get_safe_procs() - * call. Here's a list of them: + * windowprocs = *get_safe_procs(n) + * call. * - * + * Usage: + * + * windowprocs = *get_safe_procs(0); + * initializes a set of winprocs function pointers that ensure + * none of the function pointers are left null, but that's all + * it does. + * + * windowprocs = *get_safe_procs(1); + * initializes a set of winprocs functions pointers that ensure + * none of the function pointers are left null, but also + * provides some basic output and input functionality using + * nothing other than C stdio routines (no platform-specific + * or OS-specific code). * - * * *********************************************************** */ diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 3cfcc95bf..85f427725 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -718,6 +718,13 @@ mswin_exit_nhwindows(const char *str) /* Write Window settings to the registry */ mswin_write_reg(); + /* set things back to failsafes */ + windowprocs = *get_safe_procs(0); + + /* and make sure there is still a way to communicate something */ + windowprocs.win_raw_print = mswin_raw_print; + windowprocs.win_raw_print_bold = mswin_raw_print_bold; + windowprocs.win_wait_synch = mswin_wait_synch; } /* Prepare the window to be suspended. */ -- 2.40.0