~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ssh.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
645
645
_subproc_weakrefs = set()
646
646
 
647
647
def _close_ssh_proc(proc):
648
 
    for func in [proc.stdin.close, proc.stdout.close, proc.wait]:
649
 
        try:
650
 
            func()
 
648
    """Carefully close stdin/stdout and reap the SSH process.
 
649
 
 
650
    If the pipes are already closed and/or the process has already been
 
651
    wait()ed on, that's ok, and no error is raised.  The goal is to do our best
 
652
    to clean up (whether or not a clean up was already tried).
 
653
    """
 
654
    dotted_names = ['stdin.close', 'stdout.close', 'wait']
 
655
    for dotted_name in dotted_names:
 
656
        attrs = dotted_name.split('.')
 
657
        try:
 
658
            obj = proc
 
659
            for attr in attrs:
 
660
                obj = getattr(obj, attr)
 
661
        except AttributeError:
 
662
            # It's ok for proc.stdin or proc.stdout to be None.
 
663
            continue
 
664
        try:
 
665
            obj()
651
666
        except OSError:
652
 
            pass
 
667
            # It's ok for the pipe to already be closed, or the process to
 
668
            # already be finished.
 
669
            continue
653
670
 
654
671
 
655
672
class SSHConnection(object):