diff --git a/sqlx-core/src/pool/inner.rs b/sqlx-core/src/pool/inner.rs index 7e911460..46f37d91 100644 --- a/sqlx-core/src/pool/inner.rs +++ b/sqlx-core/src/pool/inner.rs @@ -113,13 +113,13 @@ impl SharedPool { let mut size = self.size(); while size < self.options.max_connections { - let new_size = self.size.compare_and_swap(size, size + 1, Ordering::AcqRel); - - if new_size == size { - return Some(DecrementSizeGuard::new(self)); + match self + .size + .compare_exchange(size, size + 1, Ordering::AcqRel, Ordering::Acquire) + { + Ok(_) => return Some(DecrementSizeGuard::new(self)), + Err(new_size) => size = new_size, } - - size = new_size; } None