~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ssh.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-13 07:59:39 UTC
  • mfrom: (5418.1.1 merge-2.2-into-devel)
  • Revision ID: pqm@pqm.ubuntu.com-20100913075939-nh4c1k7rkuxle7zk
(spiv) Merge lp:bzr/2.2, including fixes for #619872, #631350,
        #633745.

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):