Skip to content

Commit f23dca0

Browse files
committed
recycler: check for closed pool in conn_return! macro
1 parent 8c4b72a commit f23dca0

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

src/conn/pool/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::{
2626
conn::{pool::futures::*, Conn},
2727
error::*,
2828
opts::{Opts, PoolOpts},
29-
queryable::transaction::{Transaction, TxOpts, TxStatus},
29+
queryable::transaction::{Transaction, TxOpts},
3030
};
3131

3232
mod recycler;

src/conn/pool/recycler.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ impl Future for Recycler {
6363
let mut close = self.inner.close.load(Ordering::Acquire);
6464

6565
macro_rules! conn_return {
66-
($self:ident, $conn:ident) => {{
66+
($self:ident, $conn:ident, $pool_is_closed: expr) => {{
6767
let mut exchange = $self.inner.exchange.lock().unwrap();
68-
if exchange.available.len() >= $self.pool_opts.active_bound() {
68+
if $pool_is_closed || exchange.available.len() >= $self.pool_opts.active_bound() {
6969
drop(exchange);
7070
$self.discard.push($conn.close_conn().boxed());
7171
} else {
@@ -89,7 +89,7 @@ impl Future for Recycler {
8989
} else if $conn.inner.reset_upon_returning_to_a_pool {
9090
$self.reset.push($conn.reset_for_pool().boxed());
9191
} else {
92-
conn_return!($self, $conn);
92+
conn_return!($self, $conn, false);
9393
}
9494
};
9595
}
@@ -152,7 +152,7 @@ impl Future for Recycler {
152152
loop {
153153
match Pin::new(&mut self.reset).poll_next(cx) {
154154
Poll::Pending | Poll::Ready(None) => break,
155-
Poll::Ready(Some(Ok(conn))) => conn_return!(self, conn),
155+
Poll::Ready(Some(Ok(conn))) => conn_return!(self, conn, close),
156156
Poll::Ready(Some(Err(e))) => {
157157
// an error during reset.
158158
// replace with a new connection

0 commit comments

Comments
 (0)