Skip to content

Commit cdb5707

Browse files
committed
fix race condition in pool close (#3217)
1 parent a892ebc commit cdb5707

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

sqlx-core/src/pool/inner.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,14 @@ impl<DB: Database> PoolInner<DB> {
9797
self.mark_closed();
9898

9999
async move {
100-
for permits in 1..=self.options.max_connections {
101-
// Close any currently idle connections in the pool.
102-
while let Some(idle) = self.idle_conns.pop() {
103-
let _ = idle.live.float((*self).clone()).close().await;
104-
}
105-
106-
if self.size() == 0 {
107-
break;
108-
}
100+
let _permits = self.semaphore.acquire(self.options.max_connections).await;
109101

110-
// Wait for all permits to be released.
111-
let _permits = self.semaphore.acquire(permits).await;
102+
while let Some(idle) = self.idle_conns.pop() {
103+
let _ = idle.live.raw.close().await;
112104
}
105+
106+
self.num_idle.store(0, Ordering::Release);
107+
self.size.store(0, Ordering::Release);
113108
}
114109
}
115110

0 commit comments

Comments
 (0)