From 64be91ed99c3493fa5ce93740c597d22cd1e83a5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 9 May 2009 13:19:59 +0000 Subject: [PATCH] don't call Disconnect() if the connection had been already lost (closes #10747) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60568 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/sckipc.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/common/sckipc.cpp b/src/common/sckipc.cpp index 03712a890a..8348ec749f 100644 --- a/src/common/sckipc.cpp +++ b/src/common/sckipc.cpp @@ -125,6 +125,8 @@ public: void Server_OnRequest(wxSocketEvent& event); private: + void HandleDisconnect(wxTCPConnection *connection); + DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxTCPEventHandler); }; @@ -687,25 +689,33 @@ BEGIN_EVENT_TABLE(wxTCPEventHandler, wxEvtHandler) EVT_SOCKET(_SERVER_ONREQUEST_ID, wxTCPEventHandler::Server_OnRequest) END_EVENT_TABLE() +void wxTCPEventHandler::HandleDisconnect(wxTCPConnection *connection) +{ + // connection was closed (either gracefully or not): destroy everything + connection->m_sock->Notify(false); + connection->m_sock->Close(); + + connection->SetConnected(false); + connection->OnDisconnect(); +} + void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event) { wxSocketBase *sock = event.GetSocket(); if (!sock) - return ; + return; wxSocketNotify evt = event.GetSocketEvent(); - wxTCPConnection *connection = (wxTCPConnection *)(sock->GetClientData()); + wxTCPConnection * const + connection = static_cast(sock->GetClientData()); // This socket is being deleted; skip this event if (!connection) return; - // We lost the connection: destroy everything - if (evt == wxSOCKET_LOST) + if ( evt == wxSOCKET_LOST ) { - sock->Notify(false); - sock->Close(); - connection->OnDisconnect(); + HandleDisconnect(connection); return; } @@ -826,10 +836,7 @@ void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event) break; case IPC_DISCONNECT: - sock->Notify(false); - sock->Close(); - connection->SetConnected(false); - connection->OnDisconnect(); + HandleDisconnect(connection); break; case IPC_FAIL: @@ -851,7 +858,7 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event) { wxSocketServer *server = (wxSocketServer *) event.GetSocket(); if (!server) - return ; + return; wxTCPServer *ipcserv = (wxTCPServer *) server->GetClientData(); // This socket is being deleted; skip this event @@ -864,7 +871,7 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event) // Accept the connection, getting a new socket wxSocketBase *sock = server->Accept(); if (!sock) - return ; + return; if (!sock->Ok()) { sock->Destroy(); -- 2.45.2