Applied 1215477, fixing a crash by properly removing

a file system handler in a module.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2006-09-06 13:49:42 +00:00
parent 5d5d9ae88c
commit 5949d30725
3 changed files with 48 additions and 3 deletions

View File

@@ -487,6 +487,20 @@ void wxFileSystem::AddHandler(wxFileSystemHandler *handler)
m_Handlers.Insert((size_t)0, handler);
}
wxFileSystemHandler* wxFileSystem::RemoveHandler(wxFileSystemHandler *handler)
{
// if handler has already been removed (or deleted)
// we return NULL. This is by design in case
// CleanUpHandlers() is called before RemoveHandler
// is called, as we cannot control the order
// which modules are unloaded
if (!m_Handlers.DeleteObject(handler))
return NULL;
return handler;
}
bool wxFileSystem::HasHandlerForPath(const wxString &location)
{
for ( wxList::compatibility_iterator node = m_Handlers.GetFirst();
@@ -589,15 +603,28 @@ class wxFileSystemModule : public wxModule
DECLARE_DYNAMIC_CLASS(wxFileSystemModule)
public:
wxFileSystemModule() :
wxModule(),
m_handler(NULL)
{
}
virtual bool OnInit()
{
wxFileSystem::AddHandler(new wxLocalFSHandler);
m_handler = new wxLocalFSHandler;
wxFileSystem::AddHandler(m_handler);
return true;
}
virtual void OnExit()
{
delete wxFileSystem::RemoveHandler(m_handler);
wxFileSystem::CleanUpHandlers();
}
private:
wxFileSystemHandler* m_handler;
};
IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)