diff --git a/include/wx/webrequest.h b/include/wx/webrequest.h index 40987cc2a9..be5f4136fa 100644 --- a/include/wx/webrequest.h +++ b/include/wx/webrequest.h @@ -234,6 +234,8 @@ public: static wxWebSession& GetDefault(); + static void DestroyDefault(); + static wxWebSession* New(const wxString& backend = wxWebSessionBackendDefault); static void RegisterFactory(const wxString& backend, wxSharedPtr factory); diff --git a/src/common/webrequest.cpp b/src/common/webrequest.cpp index 0414eaf146..e282d98de7 100644 --- a/src/common/webrequest.cpp +++ b/src/common/webrequest.cpp @@ -18,6 +18,7 @@ #include "wx/webrequest.h" #include "wx/mstream.h" +#include "wx/module.h" #include "wx/uri.h" #include "wx/filefn.h" #include "wx/filename.h" @@ -401,6 +402,11 @@ wxWebSession& wxWebSession::GetDefault() ms_defaultSession.reset(wxWebSession::New()); return *ms_defaultSession; +} + +void wxWebSession::DestroyDefault() +{ + ms_defaultSession.reset(); } // static @@ -449,4 +455,31 @@ bool wxWebSession::IsBackendAvailable(const wxString& backend) return factory != ms_factoryMap.end(); } +// ---------------------------------------------------------------------------- +// Module ensuring all global/singleton objects are destroyed on shutdown. +// ---------------------------------------------------------------------------- + +class WebRequestModule : public wxModule +{ +public: + WebRequestModule() + { + } + + virtual bool OnInit() wxOVERRIDE + { + return true; + } + + virtual void OnExit() wxOVERRIDE + { + wxWebSession::DestroyDefault(); + } + +private: + wxDECLARE_DYNAMIC_CLASS(WebRequestModule); +}; + +wxIMPLEMENT_DYNAMIC_CLASS(WebRequestModule, wxModule); + #endif // wxUSE_WEBREQUEST