hangup vs msghistory (trunk only)
[First of three message history patches.]
The post-3.4.3 hangup changes broke the post-3.4.3 message history
save/restore for tty (and maybe Win32, if it supports hangup handling;
other interfaces haven't implemented message history save/restore yet)
during hangup saves by preventing interface-specific getmsghistory() from
being called. Relatively benign; hangup save just behaved as if message
history was empty, so restore had no old messages to put back. Naturally
post-hangup restore is when players would be most interested in reviewing
the previous session's messages, so benign failure isn't acceptable. Fix
is to leave getmsghistory() intact when replacing windowprocs with the
I/O-free routines. [I can't trigger real hangups for testing, but can
call hangup() from within the debugger to force an approximation of one.]
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user