From 1c8196ae60154bd60e3405e150ac5690a7d42da7 Mon Sep 17 00:00:00 2001 From: Adrian DC Date: Thu, 25 Feb 2021 19:59:14 +0100 Subject: [PATCH] fix: resolve #254: resolve double close calls and race conditions --- src/internal/sio_client_impl.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 1f91d5a9..8cf9ed9c 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -387,15 +387,16 @@ namespace sio void client_impl::on_fail(connection_hdl) { - if (m_con_state == con_closing) { + con_state m_con_state_was = m_con_state; + m_con.reset(); + m_con_state = con_closed; + this->sockets_invoke_void(&sio::socket::on_disconnect); + + if (m_con_state_was == con_closing) { LOG("Connection failed while closing." << endl); - this->close(); return; } - m_con.reset(); - m_con_state = con_closed; - this->sockets_invoke_void(&sio::socket::on_disconnect); LOG("Connection failed." << endl); if(m_reconn_madeclose(); return; } - LOG("Connected." << endl); - m_con_state = con_opened; - m_con = con; - m_reconn_made = 0; this->sockets_invoke_void(&sio::socket::on_open); this->socket(""); if(m_open_listener)m_open_listener();