705096250d
Currently, GDB can pass a signal to the wrong thread in several
different but related scenarios.
E.g., if thread 1 stops for signal SIGFOO, the user switches to thread
2, and then issues "continue", SIGFOO is actually delivered to thread
2, not thread 1. This obviously messes up programs that use
pthread_kill to send signals to specific threads.
This has been a known issue for a long while. Back in 2008 when I
made stop_signal be per-thread (
|
||
---|---|---|
.. | ||
attach-into-signal.c | ||
attach-into-signal.exp | ||
attach-stopped.c | ||
attach-stopped.exp | ||
bp_in_thread.c | ||
bp_in_thread.exp | ||
clone-new-thread-event.c | ||
clone-new-thread-event.exp | ||
corethreads.c | ||
corethreads.exp | ||
create-fail.c | ||
create-fail.exp | ||
current-lwp-dead.c | ||
current-lwp-dead.exp | ||
dlopen-libpthread-lib.c | ||
dlopen-libpthread.c | ||
dlopen-libpthread.exp | ||
execl.c | ||
execl.exp | ||
execl1.c | ||
fork-child-threads.c | ||
fork-child-threads.exp | ||
fork-thread-pending.c | ||
fork-thread-pending.exp | ||
gcore-thread.exp | ||
hand-call-in-threads.c | ||
hand-call-in-threads.exp | ||
ia64-sigill.c | ||
ia64-sigill.exp | ||
info-threads-cur-sal-2.c | ||
info-threads-cur-sal.c | ||
info-threads-cur-sal.exp | ||
interrupted-hand-call.c | ||
interrupted-hand-call.exp | ||
kill.c | ||
kill.exp | ||
killed.c | ||
killed.exp | ||
leader-exit.c | ||
leader-exit.exp | ||
linux-dp.c | ||
linux-dp.exp | ||
local-watch-wrong-thread.c | ||
local-watch-wrong-thread.exp | ||
Makefile.in | ||
manythreads.c | ||
manythreads.exp | ||
multi-create.c | ||
multi-create.exp | ||
multiple-step-overs.c | ||
multiple-step-overs.exp | ||
no-unwaited-for-left.c | ||
no-unwaited-for-left.exp | ||
non-ldr-exc-1.c | ||
non-ldr-exc-1.exp | ||
non-ldr-exc-2.c | ||
non-ldr-exc-2.exp | ||
non-ldr-exc-3.c | ||
non-ldr-exc-3.exp | ||
non-ldr-exc-4.c | ||
non-ldr-exc-4.exp | ||
pending-step.c | ||
pending-step.exp | ||
print-threads.c | ||
print-threads.exp | ||
pthread_cond_wait.c | ||
pthread_cond_wait.exp | ||
pthreads.c | ||
pthreads.exp | ||
reconnect-signal.c | ||
reconnect-signal.exp | ||
schedlock.c | ||
schedlock.exp | ||
siginfo-threads.c | ||
siginfo-threads.exp | ||
signal-command-handle-nopass.c | ||
signal-command-handle-nopass.exp | ||
signal-command-multiple-signals-pending.c | ||
signal-command-multiple-signals-pending.exp | ||
signal-delivered-right-thread.c | ||
signal-delivered-right-thread.exp | ||
signal-while-stepping-over-bp-other-thread.c | ||
signal-while-stepping-over-bp-other-thread.exp | ||
sigstep-threads.c | ||
sigstep-threads.exp | ||
sigthread.c | ||
sigthread.exp | ||
staticthreads.c | ||
staticthreads.exp | ||
step-over-lands-on-breakpoint.c | ||
step-over-lands-on-breakpoint.exp | ||
step-over-trips-on-watchpoint.c | ||
step-over-trips-on-watchpoint.exp | ||
stepi-random-signal.c | ||
stepi-random-signal.exp | ||
switch-threads.c | ||
switch-threads.exp | ||
thread-execl.c | ||
thread-execl.exp | ||
thread-find.exp | ||
thread-specific-bp.c | ||
thread-specific-bp.exp | ||
thread-specific.c | ||
thread-specific.exp | ||
thread-unwindonsignal.exp | ||
thread_check.c | ||
thread_check.exp | ||
thread_events.c | ||
thread_events.exp | ||
threadapply.c | ||
threadapply.exp | ||
threxit-hop-specific.c | ||
threxit-hop-specific.exp | ||
tls-main.c | ||
tls-nodebug.c | ||
tls-nodebug.exp | ||
tls-shared.c | ||
tls-shared.exp | ||
tls-var-main.c | ||
tls-var.c | ||
tls-var.exp | ||
tls.c | ||
tls.exp | ||
tls2.c | ||
watchpoint-fork-child.c | ||
watchpoint-fork-mt.c | ||
watchpoint-fork-parent.c | ||
watchpoint-fork-st.c | ||
watchpoint-fork.exp | ||
watchpoint-fork.h | ||
watchthreads-reorder.c | ||
watchthreads-reorder.exp | ||
watchthreads.c | ||
watchthreads.exp | ||
watchthreads2.c | ||
watchthreads2.exp | ||
wp-replication.c | ||
wp-replication.exp |