• Cyrill Gorcunov's avatar
    ctrools: Rewrite task/threads stopping engine is back · e6160516
    Cyrill Gorcunov authored
    This commit brings the former "Rewrite task/threads stopping engine"
    commit back. Handling it separately is too complex so better try
    to handle it in-place.
    
    Note some tests might fault, it's expected.
    ---
    
    Stopping tasks with STOP and proceeding with SEIZE is actually excessive --
    the SEIZE if enough. Moreover, just killing a task with STOP is also racy,
    since task should be given some time to come to sleep before its proc
    can be parsed.
    
    Rewrite all this code to SEIZE task and all its threads from the very beginning.
    
    With this we can distinguish stopped task state and migrate it properly (not
    supported now, need to implement).
    
    This thing however has one BIG problem -- after we SEIZE-d a task we should
    seize
    it's threads, but we should do it in a loop -- reading /proc/pid/task and
    seizing
    them again and again, until the contents of this dir stops changing (not done
    now).
    
    Besides, after we seized a task and all its threads we cannot scan it's children
    list once -- task can get reparented to init and any task's child can call clone
    with CLONE_PARENT flag thus repopulating the children list of the already seized
    task (not done also)
    
    This patch is ugly, yes, but splitting it doesn't help to review it much, sorry
    :(
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
    e6160516
crtools.c 8.32 KB