Bug 212105 - Crash in MarkerClusterHolder destructor
Summary: Crash in MarkerClusterHolder destructor
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Geolocation-Marble (show other bugs)
Version: 1.0.0
Platform: Compiled Sources Unspecified
: NOR crash
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-10-27 20:58 UTC by cedric
Modified: 2017-08-18 20:02 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 1.0.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description cedric 2009-10-27 20:58:03 UTC
Version:            (using Devel)
Installed from:    Compiled sources

Crash in MarkerClusterHolder destructor because it access d->externalDrawPlugin which has been alreaédy deleted by LayerManager destructor (in marble)

here the valgrind log :

==32507== Invalid write of size 4
==32507==    at 0x5180CE7: Marble::ExternalDrawPlugin::setRenderCallback(void (*)(Marble::GeoPainter*, void*), void*) (externaldraw.h:91)
==32507==    by 0x517FA2B: Digikam::MarkerClusterHolder::~MarkerClusterHolder() (markerclusterholder.cpp:158)
==32507==    by 0x6E19DBE: QObjectPrivate::deleteChildren() (in /usr/lib/libQtCore.so.4.6.0)
==32507==    by 0x612AD56: QWidget::~QWidget() (in /usr/lib/libQtGui.so.4.6.0)
==32507==    by 0x5584C9E: Marble::MarbleWidget::~MarbleWidget() (MarbleWidget.cpp:152)
==32507==    by 0x5181159: Digikam::MarbleSubClassWidget::~MarbleSubClassWidget() (markerclusterholder.h:435)
==32507==    by 0x6E19DBE: QObjectPrivate::deleteChildren() (in /usr/lib/libQtCore.so.4.6.0)
==32507==    by 0x612AD56: QWidget::~QWidget() (in /usr/lib/libQtGui.so.4.6.0)
==32507==    by 0x65038A0: QFrame::~QFrame() (in /usr/lib/libQtGui.so.4.6.0)
==32507==    by 0x51789E8: Digikam::WorldMapWidget::~WorldMapWidget() (worldmapwidget.cpp:190)
==32507==    by 0x6E19DBE: QObjectPrivate::deleteChildren() (in /usr/lib/libQtCore.so.4.6.0)
==32507==    by 0x612AD56: QWidget::~QWidget() (in /usr/lib/libQtGui.so.4.6.0)
==32507==  Address 0x20b872e0 is 16 bytes inside a block of size 24 free'd
==32507==    at 0x402357D: operator delete(void*) (vg_replace_malloc.c:346)
==32507==    by 0x164FFABF: Marble::ExternalDrawPlugin::~ExternalDrawPlugin() (externaldraw.h:44)
==32507==    by 0x55C91A5: void qDeleteAll<QList<Marble::RenderPlugin*>::const_iterator>(QList<Marble::RenderPlugin*>::const_iterator, QList<Marble::RenderPlugin*>::const_iterator) (qalgorithms.h:333)
==32507==    by 0x55C9254: void qDeleteAll<QList<Marble::RenderPlugin*> >(QList<Marble::RenderPlugin*> const&) (qalgorithms.h:341)
==32507==    by 0x55C8850: Marble::LayerManager::~LayerManager() (LayerManager.cpp:88)
==32507==    by 0x5589A44: Marble::MarbleModel::~MarbleModel() (MarbleModel.cpp:246)
==32507==    by 0x558E958: Marble::MarbleMap::~MarbleMap() (MarbleMap.cpp:382)
==32507==    by 0x55863D8: Marble::MarbleWidgetPrivate::~MarbleWidgetPrivate() (MarbleWidget.cpp:91)
==32507==    by 0x5584C8B: Marble::MarbleWidget::~MarbleWidget() (MarbleWidget.cpp:151)
==32507==    by 0x5181159: Digikam::MarbleSubClassWidget::~MarbleSubClassWidget() (markerclusterholder.h:435)
==32507==    by 0x6E19DBE: QObjectPrivate::deleteChildren() (in /usr/lib/libQtCore.so.4.6.0)
==32507==    by 0x612AD56: QWidget::~QWidget() (in /usr/lib/libQtGui.so.4.6.0)
Comment 1 caulier.gilles 2009-10-27 21:11:06 UTC
Which Marble version you use ?

Gilles Caulier
Comment 2 cedric 2009-10-27 21:47:03 UTC
I build kdeedu from svn trunk (4.4)
Comment 3 Michael G. Hansen 2009-10-29 21:12:21 UTC
SVN commit 1042443 by mghansen:

Fix invalid reads when closing under KDE 4.3.2.

CCBUG: 212105



 M  +2 -1      markerclusterholder.cpp  
 M  +7 -0      markerclusterholder.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1042443
Comment 4 Michael G. Hansen 2009-10-29 21:13:39 UTC
Fixed for KDE 4.3.2, please test again under 4.4.

Michael
Comment 5 cedric 2009-12-26 12:59:05 UTC
I cannot reproduce it anymore.
seems fixed to me.