mirror of https://github.com/xemu-project/xemu.git
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);
|
sigfillset(&set);
|
||||||
sigprocmask(SIG_SETMASK, &set, 0);
|
sigprocmask(SIG_SETMASK, &set, 0);
|
||||||
|
|
||||||
|
restart_scan:
|
||||||
sig = ts->sync_signal.pending;
|
sig = ts->sync_signal.pending;
|
||||||
if (sig) {
|
if (sig) {
|
||||||
/* Synchronous signals are forced,
|
/* Synchronous signals are forced,
|
||||||
|
@ -5952,8 +5953,10 @@ void process_pending_signals(CPUArchState *cpu_env)
|
||||||
(!sigismember(blocked_set,
|
(!sigismember(blocked_set,
|
||||||
target_to_host_signal_table[sig]))) {
|
target_to_host_signal_table[sig]))) {
|
||||||
handle_pending_signal(cpu_env, sig, &ts->sigtab[sig - 1]);
|
handle_pending_signal(cpu_env, sig, &ts->sigtab[sig - 1]);
|
||||||
/* Restart scan from the beginning */
|
/* Restart scan from the beginning, as handle_pending_signal
|
||||||
sig = 1;
|
* might have resulted in a new synchronous signal (eg SIGSEGV).
|
||||||
|
*/
|
||||||
|
goto restart_scan;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue