From f8ae1a9997fdf7b49ef2fdca19c659a970c4969c Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Wed, 11 Sep 2013 19:37:52 +0200 Subject: [PATCH] Removed some potential memory leaks. --- common/tool/tool_manager.cpp | 13 +++++++++++++ include/wxBasePcbFrame.h | 4 ++-- include/wxPcbStruct.h | 1 + pcbnew/pcbframe.cpp | 1 + pcbnew/tools/pcb_tools.cpp | 7 +++++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/common/tool/tool_manager.cpp b/common/tool/tool_manager.cpp index 03250f8fff..0c7a97538c 100644 --- a/common/tool/tool_manager.cpp +++ b/common/tool/tool_manager.cpp @@ -86,6 +86,19 @@ TOOL_MANAGER::TOOL_MANAGER() } +TOOL_MANAGER::~TOOL_MANAGER() +{ + std::map::iterator it, it_end; + + for( it = m_toolState.begin(), it_end = m_toolState.end(); it != it_end; ++it ) + { + delete it->second->cofunc; // delete cofunction + delete it->second; // delete TOOL_STATE + delete it->first; // delete the tool itself + } +} + + void TOOL_MANAGER::RegisterTool( TOOL_BASE* aTool ) { TOOL_STATE* st = new TOOL_STATE; diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h index 874349dfd0..fdaaa1f767 100644 --- a/include/wxBasePcbFrame.h +++ b/include/wxBasePcbFrame.h @@ -95,8 +95,8 @@ protected: /// main window. wxAuiToolBar* m_auxiliaryToolBar; - TOOL_MANAGER *m_toolManager; - TOOL_DISPATCHER *m_toolDispatcher; + TOOL_MANAGER* m_toolManager; + TOOL_DISPATCHER* m_toolDispatcher; void updateGridSelectBox(); void updateZoomSelectBox(); diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 29a65a34e5..af93d93bf0 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -118,6 +118,7 @@ protected: // to know the footprint name of components. void setupTools(); + void destroyTools(); void onGenericCommand( wxCommandEvent& aEvent ); // we'll use lower case function names for private member functions. diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 7a7a6f6e4e..8904b35e81 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -485,6 +485,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title, PCB_EDIT_FRAME::~PCB_EDIT_FRAME() { + destroyTools(); m_RecordingMacros = -1; for( int i = 0; i < 10; i++ ) diff --git a/pcbnew/tools/pcb_tools.cpp b/pcbnew/tools/pcb_tools.cpp index 0dc342a17d..30692560d8 100644 --- a/pcbnew/tools/pcb_tools.cpp +++ b/pcbnew/tools/pcb_tools.cpp @@ -50,6 +50,13 @@ void PCB_EDIT_FRAME::setupTools() } +void PCB_EDIT_FRAME::destroyTools() +{ + delete m_toolDispatcher; + delete m_toolManager; +} + + void PCB_EDIT_FRAME::onGenericCommand( wxCommandEvent &aEvent ) { m_toolDispatcher->DispatchWxCommand( aEvent );