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