diff --git a/tes/sshwrapper/__init__.py b/tes/sshwrapper/__init__.py index 45c3339e3d0bf8bb742af67a9a3090adc25374f1..fe1ef94f5f3e5d133e28f2e410383ffa57fc0e32 100644 --- a/tes/sshwrapper/__init__.py +++ b/tes/sshwrapper/__init__.py @@ -98,8 +98,10 @@ class Ssh: @staticmethod def check_ctrlsocket(sess, ctrlsocket): cmd = ['ssh','-S',ctrlsocket,'-O','check','-l','noone','nohost'] - check_p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=None) - (stderr,stdout) = check_p.communicate(timeout=Ssh.TIMEOUT) + try: + check_p = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=None) + (stderr,stdout) = check_p.communicate(timeout=Ssh.TIMEOUT) + return check_p.returncode == 0 @staticmethod @@ -115,9 +117,14 @@ class Ssh: logger.debug("enter get_ctrl_master_socket") ctrlsocket = "/tmp/cm-{}-{}-{}".format(user,host,sess.sshsessid) sess.lock.acquire() - if Ssh.check_ctrlsocket(sess,ctrlsocket): + try: + if Ssh.check_ctrlsocket(sess,ctrlsocket): + sess.lock.release() + return ctrlsocket + except subprocess.TimeoutExpired as e: sess.lock.release() - return ctrlsocket + raise e + try: mode = os.stat(ctrlsocket).st_mode logger.debug('removing stale control socket')