Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BUG: Fix memory leaks in SubjectHierarchy Register and Segment plugins
Since QMenu constructor does not take a QObject as a parent, this commit introduces a QSharedPointer to manage the menu instance. This commit fixes the error(s) reported below by valgrind memcheck tool. Valgrind was used on Ubuntu 14.04 against a Debug build of Slicer. It was exected doing the following: (1) Start a terminal with the appropriate environment: ./Slicer --gnome-terminal (2) Start Slicer using valgrind: valgrind --log-file=2015-07-16-Slicer-memcheck.txt --tool=memcheck --leak-check=yes ./bin/SlicerApp-real --disable-python --disable-cli-modules (3) Exit Slicer and inspect valgrind log file Valgrind error: ==29339== 1,160 (40 direct, 1,120 indirect) bytes in 1 blocks are definitely lost in loss record 2,294 of 2,448 ==29339== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==29339== by 0x10550A4D9: qSlicerSubjectHierarchySegmentPluginPrivate::init() (qSlicerSubjectHierarchySegmentPlugin.cxx:114) ==29339== by 0x10550A3E7: qSlicerSubjectHierarchySegmentPlugin::qSlicerSubjectHierarchySegmentPlugin(QObject*) (qSlicerSubjectHierarchySegmentPlugin.cxx:103) ==29339== by 0x1054F1217: qSlicerSubjectHierarchyPluginLogic::registerCorePlugins() (qSlicerSubjectHierarchyPluginLogic.cxx:139) ==29339== by 0x1054F0DFD: qSlicerSubjectHierarchyPluginLogic::qSlicerSubjectHierarchyPluginLogic(QWidget*) (qSlicerSubjectHierarchyPluginLogic.cxx:117) ==29339== by 0x1080E2F5C: qSlicerSubjectHierarchyModule::createLogic() (qSlicerSubjectHierarchyModule.cxx:137) ==29339== by 0x8E715C1: qSlicerAbstractCoreModule::logic() (qSlicerAbstractCoreModule.cxx:280) ==29339== by 0x8E70BAD: qSlicerAbstractCoreModule::initialize(vtkSlicerApplicationLogic*) (qSlicerAbstractCoreModule.cxx:99) ==29339== by 0x8EA2A19: qSlicerModuleFactoryManager::loadModule(QString const&, QString const&) (qSlicerModuleFactoryManager.cxx:170) ==29339== by 0x8EA2586: qSlicerModuleFactoryManager::loadModule(QString const&) (qSlicerModuleFactoryManager.cxx:110) ==29339== by 0x40672A: (anonymous namespace)::SlicerAppMain(int, char**) (Main.cxx:193) ==29339== by 0x406D30: main (Main.cxx:254) ==29339== ==29339== 1,176 (40 direct, 1,136 indirect) bytes in 1 blocks are definitely lost in loss record 2,296 of 2,448 ==29339== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==29339== by 0x105507073: qSlicerSubjectHierarchyRegisterPluginPrivate::init() (qSlicerSubjectHierarchyRegisterPlugin.cxx:120) ==29339== by 0x105506EC1: qSlicerSubjectHierarchyRegisterPlugin::qSlicerSubjectHierarchyRegisterPlugin(QObject*) (qSlicerSubjectHierarchyRegisterPlugin.cxx:104) ==29339== by 0x1054F11ED: qSlicerSubjectHierarchyPluginLogic::registerCorePlugins() (qSlicerSubjectHierarchyPluginLogic.cxx:137) ==29339== by 0x1054F0DFD: qSlicerSubjectHierarchyPluginLogic::qSlicerSubjectHierarchyPluginLogic(QWidget*) (qSlicerSubjectHierarchyPluginLogic.cxx:117) ==29339== by 0x1080E2F5C: qSlicerSubjectHierarchyModule::createLogic() (qSlicerSubjectHierarchyModule.cxx:137) ==29339== by 0x8E715C1: qSlicerAbstractCoreModule::logic() (qSlicerAbstractCoreModule.cxx:280) ==29339== by 0x8E70BAD: qSlicerAbstractCoreModule::initialize(vtkSlicerApplicationLogic*) (qSlicerAbstractCoreModule.cxx:99) ==29339== by 0x8EA2A19: qSlicerModuleFactoryManager::loadModule(QString const&, QString const&) (qSlicerModuleFactoryManager.cxx:170) ==29339== by 0x8EA2586: qSlicerModuleFactoryManager::loadModule(QString const&) (qSlicerModuleFactoryManager.cxx:110) ==29339== by 0x40672A: (anonymous namespace)::SlicerAppMain(int, char**) (Main.cxx:193) ==29339== by 0x406D30: main (Main.cxx:254) svn-url: http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=24445 git-svn-id: http://svn.slicer.org/Slicer4/trunk@24445 3bd1e089-480b-0410-8dfb-8563597acbee
- Loading branch information