diff --git a/server/core/session.cc b/server/core/session.cc index a73b55560..7d18be3d6 100644 --- a/server/core/session.cc +++ b/server/core/session.cc @@ -1484,6 +1484,14 @@ void Session::book_server_response(SERVER* pServer, bool final_response) if (m_retain_last_statements && !m_last_queries.empty()) { mxb_assert(m_current_query >= 0); + + if (m_current_query < 0) + { + MXS_ALERT("Internal logic error, disabling retain_last_statements."); + m_retain_last_statements = 0; + return; + } + // If enough queries have been sent by the client, without it waiting // for the responses, then at this point it may be so that the query // object has been popped from the size limited queue. That's apparent diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 5090b9d05..fecb19c84 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -734,7 +734,7 @@ void RWSplitSession::clientReply(GWBUF* writebuf, DCB* backend_dcb) /** Got a complete reply, decrement expected response count */ m_expected_responses--; - if (!backend->is_replaying_history()) + if (!backend->is_replaying_history() && !backend->local_infile_requested()) { session_book_server_response(m_pSession, backend->backend()->server, m_expected_responses == 0); }