linux-user: Recheck for pending synchronous signals too
In process_pending_signals() we restart the scan of possible pending signals after calling handle_pending_signal() in case some other signal has been generated. This rescan should also include a check for a new synchronous signal since those are in fact the only kind of new signal that the signal frame setup process might produce. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
c836112997
commit
8bd3773cce
@ -5925,6 +5925,7 @@ void process_pending_signals(CPUArchState *cpu_env)
|
||||
sigfillset(&set);
|
||||
sigprocmask(SIG_SETMASK, &set, 0);
|
||||
|
||||
restart_scan:
|
||||
sig = ts->sync_signal.pending;
|
||||
if (sig) {
|
||||
/* Synchronous signals are forced,
|
||||
@ -5952,8 +5953,10 @@ void process_pending_signals(CPUArchState *cpu_env)
|
||||
(!sigismember(blocked_set,
|
||||
target_to_host_signal_table[sig]))) {
|
||||
handle_pending_signal(cpu_env, sig, &ts->sigtab[sig - 1]);
|
||||
/* Restart scan from the beginning */
|
||||
sig = 1;
|
||||
/* Restart scan from the beginning, as handle_pending_signal
|
||||
* might have resulted in a new synchronous signal (eg SIGSEGV).
|
||||
*/
|
||||
goto restart_scan;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user