hangup revisited (trunk only)

More SAFER_HANGUP tweaking.  Delay its kicking in until main command
loop has been reached, and shut if off again once program is terminating.
This commit is contained in:
nethack.rankin
2007-03-01 03:33:12 +00:00
parent a6b8d773de
commit c5450cbe5e
5 changed files with 8 additions and 7 deletions

View File

@@ -76,6 +76,7 @@ boolean resuming;
youmonst.movement = NORMAL_SPEED; /* give the hero some movement points */
context.move = 0;
program_state.in_moveloop = 1;
for(;;) {
#ifdef SAFERHANGUP
if (program_state.done_hup) end_of_input();

View File

@@ -2842,6 +2842,7 @@ void
hangup(sig_unused) /* called as signal() handler, so sent at least one arg */
int sig_unused;
{
if (program_state.exiting) program_state.in_moveloop = 0;
nhwindows_hangup();
# ifdef SAFERHANGUP
/* When using SAFERHANGUP, the done_hup flag it tested in rhack
@@ -2852,7 +2853,8 @@ int sig_unused;
must continue running longer before attempting a hangup save. */
program_state.done_hup++;
/* defer hangup iff game appears to be in progress */
if (program_state.something_worth_saving) return;
if (program_state.in_moveloop && program_state.something_worth_saving)
return;
# endif /* SAFERHANGUP */
end_of_input();
}

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)end.c 3.5 2007/01/02 */
/* SCCS Id: @(#)end.c 3.5 2007/02/28 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1023,6 +1023,7 @@ void
terminate(status)
int status;
{
program_state.in_moveloop = 0; /* won't be returning to normal play */
#ifdef MAC
getreturn("to exit");
#endif
@@ -1038,6 +1039,7 @@ int status;
that would cancel any other pending user-mode handlers */
if (program_state.exiting) return;
#endif
program_state.exiting = 1;
nethack_exit(status);
}