a late bot() call was observed on GUI Windows so prevent such a crash

This commit is contained in:
nhmall
2018-12-08 22:08:55 -05:00
parent 01625455d9
commit afc34d3016
3 changed files with 25 additions and 6 deletions

View File

@@ -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

View File

@@ -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).
*
*
* ***********************************************************
*/

View File

@@ -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. */