From 9181a383828ed30cc1e2a1fe5c630a1fc4c8d273 Mon Sep 17 00:00:00 2001 From: Guillermo Rodriguez Garcia Date: Fri, 3 Mar 2000 19:24:24 +0000 Subject: [PATCH] Added Destroy() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6422 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/socket.h | 4 +++- src/common/socket.cpp | 32 +++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/include/wx/socket.h b/include/wx/socket.h index 4663b0d6ed..d991e85afb 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -134,6 +134,7 @@ protected: unsigned long m_timeout; // IO timeout value wxList m_states; // Stack of states bool m_interrupt; // Interrupt ongoing wait operations + bool m_beingDeleted; // Marked for delayed deletion // Pushback buffer char *m_unread; // Pushback buffer @@ -147,9 +148,10 @@ protected: public: wxSocketBase(); virtual ~wxSocketBase(); - virtual bool Close(); + virtual bool Destroy(); // Base IO + virtual bool Close(); wxSocketBase& Peek(char* buffer, wxUint32 nbytes); wxSocketBase& Read(char* buffer, wxUint32 nbytes); wxSocketBase& Write(const char *buffer, wxUint32 nbytes); diff --git a/src/common/socket.cpp b/src/common/socket.cpp index a39f5fff48..1eefad523f 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -92,7 +92,8 @@ wxSocketBase::wxSocketBase(wxSockFlags _flags, wxSockType _type) : m_neededreq(0), m_notify_state(FALSE), m_connected(FALSE), m_establishing(FALSE), m_reading(FALSE), m_writing(FALSE), - m_error(FALSE), m_lcount(0), m_timeout(600), m_states(), + m_error(FALSE), m_lcount(0), m_timeout(600), + m_states(), m_beingDeleted(FALSE), m_unread(NULL), m_unrd_size(0), m_unrd_cur(0), m_cbk(NULL), m_cdata(NULL) { @@ -105,7 +106,8 @@ wxSocketBase::wxSocketBase() : m_neededreq(0), m_notify_state(FALSE), m_connected(FALSE), m_establishing(FALSE), m_reading(FALSE), m_writing(FALSE), - m_error(FALSE), m_lcount(0), m_timeout(600), m_states(), + m_error(FALSE), m_lcount(0), m_timeout(600), + m_states(), m_beingDeleted(FALSE), m_unread(NULL), m_unrd_size(0), m_unrd_cur(0), m_cbk(NULL), m_cdata(NULL) { @@ -113,33 +115,45 @@ wxSocketBase::wxSocketBase() : wxSocketBase::~wxSocketBase() { - if (m_unread) - free(m_unread); + // Just in case the app called Destroy() *and* then deleted + // the socket immediately: don't leave dangling pointers. +#if wxUSE_GUI + wxPendingDelete.DeleteObject(this); +#endif // Shutdown and close the socket - Close(); + if (!m_beingDeleted) + Close(); // Destroy the GSocket object if (m_socket) GSocket_destroy(m_socket); + + // Free the pushback buffer + if (m_unread) + free(m_unread); } -/* bool wxSocketBase::Destroy() { // Delayed destruction: the socket will be deleted during the next // idle loop iteration. This ensures that all pending events have // been processed. - m_beingDeleted = TRUE; + + // Shutdown and close the socket Close(); - if ( !wxPendingDelete.Member(this) ) +#if wxUSE_GUI + if ( wxPendingDelete.Member(this) ) wxPendingDelete.Append(this); +#else + delete this; +#endif return TRUE; } -*/ + // -------------------------------------------------------------------------- // Basic IO operations -- 2.45.2