From 56f5472c8841fb9abca93b73b4773d770ef6bf8c Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Sat, 16 Mar 2013 20:59:03 -0500 Subject: [PATCH] terminate test --- websocketpp/impl/connection_impl.hpp | 32 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/websocketpp/impl/connection_impl.hpp b/websocketpp/impl/connection_impl.hpp index c79c4b6dec..86e99d5f50 100644 --- a/websocketpp/impl/connection_impl.hpp +++ b/websocketpp/impl/connection_impl.hpp @@ -1004,24 +1004,28 @@ void connection::handle_send_http_response( template void connection::terminate() { - m_alog.write(log::alevel::devel,"connection terminate"); + try { + m_alog.write(log::alevel::devel,"connection terminate"); - transport_con_type::shutdown(); + transport_con_type::shutdown(); - if (m_state == session::state::CONNECTING) { - m_state = session::state::CLOSED; - if (m_fail_handler) { - m_fail_handler(m_connection_hdl); + if (m_state == session::state::CONNECTING) { + m_state = session::state::CLOSED; + if (m_fail_handler) { + m_fail_handler(m_connection_hdl); + } + } else if (m_state != session::state::CLOSED) { + m_state = session::state::CLOSED; + if (m_close_handler) { + m_close_handler(m_connection_hdl); + } + } else { + m_alog.write(log::alevel::devel,"terminate called on connection that was already terminated"); } - } else if (m_state != session::state::CLOSED) { - m_state = session::state::CLOSED; - if (m_close_handler) { - m_close_handler(m_connection_hdl); - } - } else { - m_alog.write(log::alevel::devel,"terminate called on connection that was already terminated"); + } catch (const std::exception& e) { + m_elog.write(log::elevel::warn, + std::string("terminate failed. Reason was: ") + e.what()); } - // call the termination handler if it exists // if it exists it might (but shouldn't) refer to a bad memory location. // If it does, we don't care and should catch and ignore it.