• Cyrill Gorcunov's avatar
    tty: Don't flush tty data on checkpoint stage · c19cbc5c
    Cyrill Gorcunov authored
    In case if we're dumping the peer which another
    end belongs not to us but some other application
    the attempts to flush data may lead to endless
    SIGTTOU storm:
    
     | 1158  ioctl(53, TCFLSH, 0x2)            = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
     | 1158  --- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=5, ptr=0x5}} ---
     | 1158  --- stopped by SIGTTOU ---
     | 1158  ioctl(53, TCFLSH, 0x2)            = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
     | 1158  --- SIGTTOU {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=5, ptr=0x5}} ---
     | 1158  --- stopped by SIGTTOU ---
    
    so simply don't flush data, the initial attempt to use
    TCIOFLUSH was rather "hey, we don't have a way to
    say the kernel to freeze tty link for a while, lets
    try to workaround this limitation" but without proper
    kernel help this won't work anyway as Andrey has discovered.
    Reported-by: 's avatarAndrey Vagin <avagin@openvz.org>
    Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
    Acked-by: 's avatarAndrew Vagin <avagin@parallels.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    c19cbc5c
tty.c 26 KB