diff --git a/pymongo/pool.py b/pymongo/pool.py
index 9e235c2..1b60cce 100644
--- a/pymongo/pool.py
+++ b/pymongo/pool.py
@@ -334,10 +334,17 @@ class Pool:
             finally:
                 self.lock.release()
         except KeyError:
-            sock_info, from_pool = self.connect(pair), False
+            pass
+
+        try:
+            if not sock_info:
+                sock_info, from_pool = self.connect(pair), False
 
-        if from_pool:
-            sock_info = self._check(sock_info, pair)
+            if from_pool:
+                sock_info = self._check(sock_info, pair)
+        except:
+            self._socket_semaphore.release()
+            raise
 
         sock_info.forced = forced
 
