• T
    job control: make task_clear_jobctl_pending() clear TRAPPING automatically · 6dfca329
    Tejun Heo 提交于
    JOBCTL_TRAPPING indicates that ptracer is waiting for tracee to
    (re)transit into TRACED.  task_clear_jobctl_pending() must be called
    when either tracee enters TRACED or the transition is cancelled for
    some reason.  The former is achieved by explicitly calling
    task_clear_jobctl_pending() in ptrace_stop() and the latter by calling
    it at the end of do_signal_stop().
    
    Calling task_clear_jobctl_trapping() at the end of do_signal_stop()
    limits the scope TRAPPING can be used and is fragile in that seemingly
    unrelated changes to tracee's control flow can lead to stuck TRAPPING.
    
    We already have task_clear_jobctl_pending() calls on those cancelling
    events to clear JOBCTL_STOP_PENDING.  Cancellations can be handled by
    making those call sites use JOBCTL_PENDING_MASK instead and updating
    task_clear_jobctl_pending() such that task_clear_jobctl_trapping() is
    called automatically if no stop/trap is pending.
    
    This patch makes the above changes and removes the fallback
    task_clear_jobctl_trapping() call from do_signal_stop().
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Signed-off-by: NOleg Nesterov <oleg@redhat.com>
    6dfca329
signal.c 79.4 KB