.. | .. |
---|
763 | 763 | void signal_wake_up_state(struct task_struct *t, unsigned int state) |
---|
764 | 764 | { |
---|
765 | 765 | set_tsk_thread_flag(t, TIF_SIGPENDING); |
---|
| 766 | + |
---|
| 767 | + /* TIF_SIGPENDING must be set prior to notifying. */ |
---|
| 768 | + inband_signal_notify(t); |
---|
| 769 | + |
---|
766 | 770 | /* |
---|
767 | 771 | * TASK_WAKEKILL also means wake it up in the stopped/traced/killable |
---|
768 | 772 | * case. We don't check t->state here because there is a race with it |
---|
.. | .. |
---|
984 | 988 | if (sig == SIGKILL) |
---|
985 | 989 | return true; |
---|
986 | 990 | |
---|
987 | | - if (task_is_stopped_or_traced(p)) |
---|
| 991 | + if (task_is_stopped_or_traced(p)) { |
---|
| 992 | + if (!signal_pending(p)) |
---|
| 993 | + inband_signal_notify(p); |
---|
988 | 994 | return false; |
---|
| 995 | + } |
---|
989 | 996 | |
---|
990 | 997 | return task_curr(p) || !task_sigpending(p); |
---|
991 | 998 | } |
---|
.. | .. |
---|
2145 | 2152 | * schedule() will not sleep if there is a pending signal that |
---|
2146 | 2153 | * can awaken the task. |
---|
2147 | 2154 | */ |
---|
| 2155 | + inband_ptstop_notify(); |
---|
2148 | 2156 | set_special_state(TASK_TRACED); |
---|
2149 | 2157 | |
---|
2150 | 2158 | /* |
---|
.. | .. |
---|
2238 | 2246 | read_unlock(&tasklist_lock); |
---|
2239 | 2247 | } |
---|
2240 | 2248 | |
---|
| 2249 | + inband_ptcont_notify(); |
---|
| 2250 | + |
---|
2241 | 2251 | /* |
---|
2242 | 2252 | * We are back. Now reacquire the siglock before touching |
---|
2243 | 2253 | * last_siginfo, so that we are sure to have synchronized with |
---|