* exceptions.cc (sigdelayed): Simplify declaration.

(_cygtls::call_signal_handler): Fix test for when to pop signal stack.  Only do
it exactly when what is on the stack is a no-op.
This commit is contained in:
Christopher Faylor 2012-08-03 15:38:59 +00:00
parent 4485a26eff
commit 45cb627406
2 changed files with 11 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2012-08-03 Christopher Faylor <me.cygwin2012@cgf.cx>
* exceptions.cc (sigdelayed): Simplify declaration.
(_cygtls::call_signal_handler): Fix test for when to pop signal stack.
Only do it exactly when what is on the stack is a no-op.
2012-08-03 Christopher Faylor <me.cygwin2012@cgf.cx> 2012-08-03 Christopher Faylor <me.cygwin2012@cgf.cx>
* spawn.cc (child_info_spawn::worker): Put back a minor variation of * spawn.cc (child_info_spawn::worker): Put back a minor variation of

View File

@ -37,9 +37,7 @@ details. */
char debugger_command[2 * NT_MAX_PATH + 20]; char debugger_command[2 * NT_MAX_PATH + 20];
extern "C" { extern "C" void sigdelayed ();
extern void sigdelayed ();
};
static BOOL WINAPI ctrl_c_handler (DWORD); static BOOL WINAPI ctrl_c_handler (DWORD);
@ -1086,7 +1084,7 @@ sigignore (int sig)
} }
/* Update the signal mask for this process and return the old mask. /* Update the signal mask for this process and return the old mask.
Called from sigdelayed */ Called from call_signal_handler */
extern "C" sigset_t extern "C" sigset_t
set_process_mask_delta () set_process_mask_delta ()
{ {
@ -1265,7 +1263,9 @@ _cygtls::call_signal_handler ()
break; break;
} }
if (incyg) /* Pop the stack if the next "return address" is sigdelayed, since
this function is doing what sigdelayed would have done anyway. */
if (retaddr () == (__stack_t) sigdelayed)
pop (); pop ();
debug_only_printf ("dealing with signal %d", sig); debug_only_printf ("dealing with signal %d", sig);