• O
    exit_signal: simplify the "we have changed execution domain" logic · e6368253
    Oleg Nesterov 提交于
    exit_notify() checks "tsk->self_exec_id != tsk->parent_exec_id"
    to handle the "we have changed execution domain" case.
    
    We can change do_thread() to always set ->exit_signal = SIGCHLD
    and remove this check to simplify the code.
    
    We could change setup_new_exec() instead, this looks more logical
    because it increments ->self_exec_id. But note that de_thread()
    already resets ->exit_signal if it changes the leader, let's keep
    both changes close to each other.
    
    Note that we change ->exit_signal lockless, this changes the rules.
    Thereafter ->exit_signal is not stable under tasklist but this is
    fine, the only possible change is OLDSIG -> SIGCHLD. This can race
    with eligible_child() but the race is harmless. We can race with
    reparent_leader() which changes our ->exit_signal in parallel, but
    it does the same change to SIGCHLD.
    
    The noticeable user-visible change is that the execing task is not
    "visible" to do_wait()->eligible_child(__WCLONE) right after exec.
    To me this looks more logical, and this is consistent with mt case.
    Signed-off-by: NOleg Nesterov <oleg@redhat.com>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    e6368253
exit.c 46.7 KB