Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
QgsAppMapTools: fix double-free during destruction of tools
and do it also in QgsMapToolAddEllipse, QgsMapToolAddRectangle, QgsMapToolAddRegularPolygon and QgsMapToolAddCircularString that use a similar pattern spotted by Valgrind when quitting the app: ``` ==80600== Invalid read of size 8 ==80600== at 0x61C0F54: swap<QgsMapToolCaptureRubberBand*> (move.h:193) ==80600== by 0x61C0F54: reset (unique_ptr.h:400) ==80600== by 0x61C0F54: QgsMapToolCapture::deleteTempRubberBand() (qgsmaptoolcapture.cpp:848) ==80600== by 0x4DF1017: QgsMapToolAddCircle::clean() (qgsmaptooladdcircle.cpp:135) ==80600== by 0x4DF1390: QgsMapToolAddCircle::~QgsMapToolAddCircle() (qgsmaptooladdcircle.cpp:41) ==80600== by 0x4DF36BC: QgsMapToolCircle2TangentsPoint::~QgsMapToolCircle2TangentsPoint() (qgsmaptoolcircle2tangentspoint.cpp:44) ==80600== by 0x4E9516E: QgsAppMapTools::~QgsAppMapTools() (qgsappmaptools.cpp:185) ==80600== by 0x4B327D2: operator() (unique_ptr.h:81) ==80600== by 0x4B327D2: operator() (unique_ptr.h:75) ==80600== by 0x4B327D2: reset (unique_ptr.h:402) ==80600== by 0x4B327D2: QgisApp::~QgisApp() (qgisapp.cpp:1725) ==80600== by 0x4B32E2C: QgisApp::~QgisApp() (qgisapp.cpp:1787) ==80600== by 0x1163F7: main (main.cpp:1645) ==80600== Address 0x2b25e608 is 200 bytes inside a block of size 616 free'd ==80600== at 0x483D1CF: operator delete(void*, unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==80600== by 0x4E9516E: QgsAppMapTools::~QgsAppMapTools() (qgsappmaptools.cpp:185) ==80600== by 0x4B327D2: operator() (unique_ptr.h:81) ==80600== by 0x4B327D2: operator() (unique_ptr.h:75) ==80600== by 0x4B327D2: reset (unique_ptr.h:402) ==80600== by 0x4B327D2: QgisApp::~QgisApp() (qgisapp.cpp:1725) ==80600== by 0x4B32E2C: QgisApp::~QgisApp() (qgisapp.cpp:1787) ==80600== by 0x1163F7: main (main.cpp:1645) ==80600== Block was alloc'd at ==80600== at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) ==80600== by 0x4E956E2: QgsAppMapTools::QgsAppMapTools(QgsMapCanvas*, QgsAdvancedDigitizingDockWidget*) (qgsappmaptools.cpp:128) ==80600== by 0x4B6409B: make_unique<QgsAppMapTools, QgsMapCanvas*&, QgsAdvancedDigitizingDockWidget*&> (unique_ptr.h:857) ==80600== by 0x4B6409B: QgisApp::QgisApp(QSplashScreen*, bool, bool, QString const&, QString const&, QWidget*, QFlags<Qt::WindowType>) (qgisapp.cpp:1052) ==80600== by 0x1157A7: main (main.cpp:1377) ``` The reason was that the mParentTool of QgsMapToolCapture was already destroyed
- Loading branch information