• Tejun Heo's avatar
    job control: introduce task_set_jobctl_pending() · 7dd3db54
    Tejun Heo authored
    task->jobctl currently hosts JOBCTL_STOP_PENDING and will host TRAP
    pending bits too.  Setting pending conditions on a dying task may make
    the task unkillable.  Currently, each setting site is responsible for
    checking for the condition but with to-be-added job control traps this
    becomes too fragile.
    
    This patch adds task_set_jobctl_pending() which should be used when
    setting task->jobctl bits to schedule a stop or trap.  The function
    performs the followings to ease setting pending bits.
    
    * Sanity checks.
    
    * If fatal signal is pending or PF_EXITING is set, no bit is set.
    
    * STOP_SIGMASK is automatically cleared if new value is being set.
    
    do_signal_stop() and ptrace_attach() are updated to use
    task_set_jobctl_pending() instead of setting STOP_PENDING explicitly.
    The surrounding structures around setting are changed to fit
    task_set_jobctl_pending() better but there should be no userland
    visible behavior difference.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    7dd3db54
sched.h 78.9 KB