From 3b4183d82b7b833106edd751632c2f24c9580eb6 Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Sat, 28 Nov 1998 18:36:47 +0000 Subject: [PATCH] * Fixed some "memory leak" git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1077 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/socket.h | 5 ++--- include/wx/url.h | 3 ++- src/common/protocol.cpp | 29 +++++++++++++++++++++++++++++ src/common/socket.cpp | 23 +++++++++++++++++++++++ src/common/url.cpp | 10 +++++----- 5 files changed, 61 insertions(+), 9 deletions(-) diff --git a/include/wx/socket.h b/include/wx/socket.h index 7837b73813..c9e161331c 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -270,7 +270,6 @@ class WXDLLEXPORT wxSocketHandler : public wxObject { DECLARE_CLASS(wxSocketHandler) protected: - static wxSocketHandler *master; #if defined(__WINDOWS__) wxList *smsg_list; struct wxSockHandlerInternal *internal; @@ -280,6 +279,7 @@ protected: public: enum SockStatus { SOCK_NONE, SOCK_DATA, SOCK_CONNECT, SOCK_DISCONNECT, SOCK_ERROR }; + static wxSocketHandler *master; wxSocketHandler(); virtual ~wxSocketHandler(); @@ -303,8 +303,7 @@ public: (wxSocketBase::wxSockFlags flags = wxSocketBase::NONE); // Create or reuse a socket handler - static wxSocketHandler& Master() - { return *((master) ? (master) : (master = new wxSocketHandler())); } + static wxSocketHandler& Master() { return *master; } #if defined(WXSOCK_INTERNAL) && defined(__WINDOWS__) diff --git a/include/wx/url.h b/include/wx/url.h index 22741e9295..f37d4a9d90 100644 --- a/include/wx/url.h +++ b/include/wx/url.h @@ -36,7 +36,7 @@ class WXDLLEXPORT wxURL : public wxObject { DECLARE_DYNAMIC_CLASS(wxURL) protected: static wxProtoInfo *g_protocols; - static wxHTTP g_proxy; + static wxHTTP *g_proxy; wxProtoInfo *m_protoinfo; wxProtocol *m_protocol; wxHTTP m_proxy; @@ -52,6 +52,7 @@ protected: bool FetchProtocol(); friend class wxProtoInfo; + friend class wxProtocolModule; public: wxURL(const wxString& url); diff --git a/src/common/protocol.cpp b/src/common/protocol.cpp index b9cbcb8634..d0da8f2426 100644 --- a/src/common/protocol.cpp +++ b/src/common/protocol.cpp @@ -26,6 +26,7 @@ #include "wx/protocol/protocol.h" #include "wx/url.h" +#include "wx/module.h" ///////////////////////////////////////////////////////////////// // wxProtoInfo @@ -108,3 +109,31 @@ wxProtocolError GetLine(wxSocketBase *sock, wxString& result) { return wxPROTO_NOERR; #undef PROTO_BSIZE } + +// ---------------------------------------------------------------------- +// Module +// ---------------------------------------------------------------------- + +class wxProtocolModule: public wxModule { + DECLARE_DYNAMIC_CLASS(wxProtocolModule) +public: + wxProtocolModule() {} + bool OnInit(); + void OnExit(); +}; + +#if !USE_SHARED_LIBRARY +IMPLEMENT_DYNAMIC_CLASS(wxProtocolModule, wxModule) +#endif + +bool wxProtocolModule::OnInit() +{ + wxURL::g_proxy = new wxHTTP(); + return TRUE; +} + +void wxProtocolModule::OnExit() +{ + delete wxURL::g_proxy; + wxURL::g_proxy = NULL; +} diff --git a/src/common/socket.cpp b/src/common/socket.cpp index d6919eb2f0..06d558dafe 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -89,6 +89,7 @@ ///////////////////////////////////////////////////////////////////////////// // wxSocket headers ///////////////////////////////////////////////////////////////////////////// +#include "wx/module.h" #define WXSOCK_INTERNAL #include "wx/sckaddr.h" #include "wx/socket.h" @@ -153,6 +154,17 @@ int PASCAL FAR __WSAFDIsSet(SOCKET fd, fd_set FAR *set) // Some patch ///// END ///////////////////////////////////////////////////////////////////////////// +// -------------------------------------------------------------- +// Module +// -------------------------------------------------------------- +class wxSocketModule: public wxModule { + DECLARE_DYNAMIC_CLASS(wxSocketModule) +public: + wxSocketModule() {} + bool OnInit(); + void OnExit(); +}; + // -------------------------------------------------------------- // ClassInfos // -------------------------------------------------------------- @@ -162,6 +174,7 @@ IMPLEMENT_CLASS(wxSocketServer, wxSocketBase) IMPLEMENT_CLASS(wxSocketClient, wxSocketBase) IMPLEMENT_CLASS(wxSocketHandler, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxSocketEvent, wxEvent) +IMPLEMENT_DYNAMIC_CLASS(wxSocketModule, wxModule) #endif class wxSockWakeUp : public wxTimer { @@ -1543,5 +1556,15 @@ HWND wxSocketHandler::GetHWND() const #endif +bool wxSocketModule::OnInit() { + wxSocketHandler::master = new wxSocketHandler(); + return TRUE; +} + +void wxSocketModule::OnExit() { + delete wxSocketHandler::master; + wxSocketHandler::master = NULL; +} + #endif // __WXSTUBS__ diff --git a/src/common/url.cpp b/src/common/url.cpp index 0489da90d9..46e26db8ce 100644 --- a/src/common/url.cpp +++ b/src/common/url.cpp @@ -41,7 +41,7 @@ IMPLEMENT_CLASS(wxURL, wxObject) // Protocols list wxProtoInfo *wxURL::g_protocols = NULL; -wxHTTP wxURL::g_proxy; +wxHTTP *wxURL::g_proxy; ///////////////////////////////////////////////////////////////// // wxURL //////////////////////////////////////////////////////// @@ -56,8 +56,8 @@ wxHTTP wxURL::g_proxy; wxURL::wxURL(const wxString& url) { m_protocol = NULL; - if (g_proxy.IsConnected()) { - m_protocol = &g_proxy; + if (g_proxy->IsConnected()) { + m_protocol = g_proxy; m_protoname = "proxy"; m_path = url; return; @@ -267,7 +267,7 @@ wxInputStream *wxURL::GetInputStream(void) void wxURL::SetDefaultProxy(const wxString& url_proxy) { - g_proxy.Close(); + g_proxy->Close(); if (url_proxy.IsNull()) return; @@ -281,7 +281,7 @@ void wxURL::SetDefaultProxy(const wxString& url_proxy) addr.Hostname(hostname); addr.Service(port); - g_proxy.Connect(addr); + g_proxy->Connect(addr); } void wxURL::SetProxy(const wxString& url_proxy) -- 2.45.2