diff --git a/src/windows.c b/src/windows.c index 7a2d6ad89..4b490d22d 100644 --- a/src/windows.c +++ b/src/windows.c @@ -319,13 +319,24 @@ static void FDECL((*previnterface_exit_nhwindows), (const char *)) = 0; void nhwindows_hangup() { + char *FDECL((*previnterface_getmsghistory), (BOOLEAN_P)) = 0; + /* don't call exit_nhwindows() directly here; if a hangup occurs while interface code is executing, exit_nhwindows could knock the interface's active data structures out from under itself */ if (iflags.window_inited && windowprocs.win_exit_nhwindows != hup_exit_nhwindows) previnterface_exit_nhwindows = windowprocs.win_exit_nhwindows; + + /* also, we have to leave the old interface's getmsghistory() + in place because it will be called while saving the game */ + if (windowprocs.win_getmsghistory != hup_procs.win_getmsghistory) + previnterface_getmsghistory = windowprocs.win_getmsghistory; + windowprocs = hup_procs; + + if (previnterface_getmsghistory) + windowprocs.win_getmsghistory = previnterface_getmsghistory; } static void