diff --git a/include/maxscale/dcb.hh b/include/maxscale/dcb.hh index b731d0bbc..988b6b781 100644 --- a/include/maxscale/dcb.hh +++ b/include/maxscale/dcb.hh @@ -189,6 +189,7 @@ struct DCB : public MXB_POLL_DATA * -1: Evicted from the persistent pool and being closed. * non-0: Time when placed in the persistent pool. */ + bool valid_for_pool = true; // TODO: Make this private in 2.5 SERVICE* service = nullptr; /**< The related service */ void* data = nullptr; /**< Client protocol data, owned by client DCB */ void* authenticator_data = nullptr;/**< The authenticator data for this DCB */ diff --git a/server/core/backend.cc b/server/core/backend.cc index d95b25299..5467327b5 100644 --- a/server/core/backend.cc +++ b/server/core/backend.cc @@ -61,6 +61,7 @@ void Backend::close(close_type type) /** Clean operation counter in bref and in SERVER */ if (is_waiting_result()) { + m_dcb->valid_for_pool = false; clear_state(WAITING_RESULT); } clear_state(IN_USE); diff --git a/server/core/dcb.cc b/server/core/dcb.cc index 31c4c0c26..0a927981f 100644 --- a/server/core/dcb.cc +++ b/server/core/dcb.cc @@ -1260,6 +1260,7 @@ static bool dcb_maybe_add_persistent(DCB* dcb) && strlen(dcb->user) && server && dcb->session + && dcb->valid_for_pool && session_valid_for_pool(dcb->session) && server->persistpoolmax() && (server->status & SERVER_RUNNING)