I got a crash several times now when I exit akregator. Backtrace is always the same: http://www-user.rhrk.uni-kl.de/~f_osterf/akregator/akr-backtrace-crash_after_quit.txt Haven't had the time to analyze that yet, seems to be some problem with part deletion (action tries to access part after deleted?).
I suppose it has to do with the BrowserExtension/KHTMLPart. It crashes when browser tabs are open, especially when you quit while a htmlpart loads a page. Try the following: - Open a page in a tab and press Ctrl+Q while the tab loads the page. - switch to combined view, choose All Feeds (because it takes long to render) and press Ctrl+Q while it renders the articles. Both crashes here. I have another backtrace which differs a bit to the one above (kstaticdeleter involved) I'll put online. I am not sure if this is a kdelibs or an akregator bug (most likely the latter, but on the other hand, the methods involved are from kdelibs classes).
It doesn't crash in Kontact, so I guess there is something wrong in the class aKregator.
Using host libthread_db library "/lib/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread 16384 (LWP 2514)] [KCrash handler] #5 0x47f12741 in KParts::BrowserExtension::slotEnableAction(char const*, bool) () from /opt2/kde-cvs/lib/libkparts.so.2 #6 0x47f14ca0 in KParts::BrowserExtension::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkparts.so.2 #7 0x4853d843 in KHTMLPartBrowserExtension::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkhtml.so.4 #8 0x46f7bddc in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/qt/3/lib/libqt-mt.so.3 #9 0x47f1385f in KParts::BrowserExtension::enableAction(char const*, bool) () from /opt2/kde-cvs/lib/libkparts.so.2 #10 0x4853594a in KHTMLPartBrowserExtension::updateEditActions() () from /opt2/kde-cvs/lib/libkhtml.so.4 #11 0x48534e2b in KHTMLPartBrowserExtension::setExtensionProxy(KParts::BrowserExtension*) () from /opt2/kde-cvs/lib/libkhtml.so.4 #12 0x48525a22 in KHTMLPart::slotActiveFrameChanged(KParts::Part*) () from /opt2/kde-cvs/lib/libkhtml.so.4 #13 0x48527f34 in KHTMLPart::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkhtml.so.4 #14 0x46f7bddc in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/qt/3/lib/libqt-mt.so.3 #15 0x47f0b45d in KParts::PartManager::activePartChanged(KParts::Part*) () from /opt2/kde-cvs/lib/libkparts.so.2 #16 0x47f0a772 in KParts::PartManager::setActivePart(KParts::Part*, QWidget*) () from /opt2/kde-cvs/lib/libkparts.so.2 #17 0x4850179a in KHTMLPart::~KHTMLPart() () from /opt2/kde-cvs/lib/libkhtml.so.4 #18 0x4010e4d7 in Akregator::PageViewer::~PageViewer() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #19 0x47efffe9 in KParts::Part::slotWidgetDestroyed() () from /opt2/kde-cvs/lib/libkparts.so.2 #20 0x47f02b58 in KParts::Part::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkparts.so.2 #21 0x47f02faa in KParts::ReadOnlyPart::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkparts.so.2 #22 0x485281a3 in KHTMLPart::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/libkhtml.so.4 #23 0x40100244 in Akregator::Viewer::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #24 0x4010e1ed in Akregator::PageViewer::qt_invoke(int, QUObject*) () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #25 0x46f7bd56 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/qt/3/lib/libqt-mt.so.3 #26 0x46f7bc04 in QObject::activate_signal(int) () from /usr/qt/3/lib/libqt-mt.so.3 #27 0x472b900b in QObject::destroyed() () from /usr/qt/3/lib/libqt-mt.so.3 #28 0x46f78a1a in QObject::~QObject() () from /usr/qt/3/lib/libqt-mt.so.3 #29 0x46fac391 in QWidget::~QWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #30 0x4708e5a5 in QScrollView::~QScrollView() () from /usr/qt/3/lib/libqt-mt.so.3 #31 0x484e5cc8 in KHTMLView::~KHTMLView() () from /opt2/kde-cvs/lib/libkhtml.so.4 #32 0x46fac3ed in QWidget::~QWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #33 0x470bc436 in QWidgetStack::~QWidgetStack() () from /usr/qt/3/lib/libqt-mt.so.3 #34 0x46fac3ed in QWidget::~QWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #35 0x470a5f42 in QTabWidget::~QTabWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #36 0x47a79799 in KTabWidget::~KTabWidget() () from /opt2/kde-cvs/lib/libkdeui.so.4 #37 0x4010e80d in Akregator::TabWidget::~TabWidget() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #38 0x46fac3ed in QWidget::~QWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #39 0x4709b571 in QSplitter::~QSplitter() () from /usr/qt/3/lib/libqt-mt.so.3 #40 0x46fac3ed in QWidget::~QWidget() () from /usr/qt/3/lib/libqt-mt.so.3 #41 0x400ee6a8 in Akregator::aKregatorView::~aKregatorView() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #42 0x47efee98 in KParts::Part::~Part() () from /opt2/kde-cvs/lib/libkparts.so.2 #43 0x47f0035d in KParts::ReadOnlyPart::~ReadOnlyPart() () from /opt2/kde-cvs/lib/libkparts.so.2 #44 0x47f011af in KParts::ReadWritePart::~ReadWritePart() () from /opt2/kde-cvs/lib/libkparts.so.2 #45 0x400def63 in Akregator::aKregatorPart::~aKregatorPart() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #46 0x47a2f09e in QPtrList<QObject>::deleteItem(void*) () from /opt2/kde-cvs/lib/libkdeui.so.4 #47 0x47233e8e in QGList::clear() () from /usr/qt/3/lib/libqt-mt.so.3 #48 0x4767d70a in KLibrary::~KLibrary() () from /opt2/kde-cvs/lib/libkdecore.so.4 #49 0x47680806 in KLibLoader::close_pending(KLibWrapPrivate*) () from /opt2/kde-cvs/lib/libkdecore.so.4 #50 0x4767f29c in KLibLoader::~KLibLoader() () from /opt2/kde-cvs/lib/libkdecore.so.4 #51 0x4767e278 in KLibLoader::cleanUp() () from /opt2/kde-cvs/lib/libkdecore.so.4 #52 0x475b8be1 in KApplication::~KApplication() () from /opt2/kde-cvs/lib/libkdecore.so.4 #53 0x47684397 in KUniqueApplication::~KUniqueApplication() () from /opt2/kde-cvs/lib/libkdecore.so.4 #54 0x08055c29 in aKregatorApp::~aKregatorApp() () #55 0x0814f918 in ?? () #56 0xbffff568 in ?? () #57 0x0805521e in main ()
In the Kontact plugin it doesn't crash. Thus I think the part handling/BrowserExtension code in AkregatorMainWindow causes the crash.
CVS commit by osterfeld: Don't crash on exit when page viewers are opened. Still does, when one of the HTML parts (page viewers or article viewer) is rendering when you exit. CCMAIL: 91660@bugs.kde.org M +5 -2 akregator.cpp 1.68 M +1 -1 akregator_part.cpp 1.98 M +23 -2 akregator_view.cpp 1.147 M +3 -2 akregator_view.h 1.65 M +1 -1 myarticle.cpp 1.22 --- kdenonbeta/akregator/src/akregator.cpp #1.67:1.68 @@ -13,5 +13,4 @@ #include <dcopclient.h> -#include <dcopobject.h> #include <ksqueezedtextlabel.h> @@ -142,5 +141,9 @@ void AkregatorMainWindow::loadStandardFi AkregatorMainWindow::~AkregatorMainWindow() -{} +{ + kdDebug() << "AkregatorMainWindow::~AkregatorMainWindow: delete part" << endl; + delete m_part; + kdDebug() << "AkregatorMainWindow::~AkregatorMainWindow: part deleted" << endl; +} void AkregatorMainWindow::setCaption(const QString &a) --- kdenonbeta/akregator/src/akregator_part.cpp #1.97:1.98 @@ -70,5 +70,5 @@ void aKregatorPart::setupActions() new KAction(i18n("&Add Feed..."), "bookmark_add", "Insert", m_view, SLOT(slotFeedAdd()), actionCollection(), "feed_add"); new KAction(i18n("Ne&w Folder..."), "folder_new", "Shift+Insert", m_view, SLOT(slotFeedAddGroup()), actionCollection(), "feed_add_group"); - new KAction(i18n("&Delete"), "editdelete", "Delete", m_view, SLOT(slotFeedRemove()), actionCollection(), "feed_remove"); + new KAction(i18n("&Delete"), "editdelete", "Alt+Delete", m_view, SLOT(slotFeedRemove()), actionCollection(), "feed_remove"); new KAction(i18n("&Edit..."), "edit", "F2", m_view, SLOT(slotFeedModify()), actionCollection(), "feed_modify"); --- kdenonbeta/akregator/src/akregator_view.cpp #1.146:1.147 @@ -74,4 +74,17 @@ using namespace Akregator; +aKregatorView::~aKregatorView() +{ + m_shuttingDown = true; // prevents slotFrameChanged from crashing + // close all pageviewers in a controlled way + // fixes bug 91660, at least when no part loading data + m_tabs->setCurrentPage(m_tabs->count()-1); // select last page + while (m_tabs->count() > 1) // remove frames until only the main frame remains + slotRemoveFrame(); + + delete m_mainTab; + delete m_mainFrame; +} + aKregatorView::aKregatorView( aKregatorPart *part, QWidget *parent, const char *wName) : QWidget(parent, wName), m_viewMode(NormalView) @@ -80,5 +93,5 @@ aKregatorView::aKregatorView( aKregatorP m_part=part; m_stopLoading=false; - + m_shuttingDown = false; setFocusPolicy(QWidget::StrongFocus); @@ -249,4 +262,5 @@ void aKregatorView::slotOpenTab(const KU { PageViewer* page = new PageViewer(this, "page"); + m_part->manager()->addPart(page); @@ -643,5 +657,10 @@ void aKregatorView::slotRemoveFrame() if (f == m_mainFrame) return; + m_tabs->removeFrame(f); + + if (f->part() != m_part) + delete f->part(); + delete f; if (m_tabs->count() <= 1) @@ -651,4 +670,7 @@ void aKregatorView::slotRemoveFrame() void aKregatorView::slotFrameChanged(Frame *f) { + if (m_shuttingDown) + return; + m_currentFrame=f; --- kdenonbeta/akregator/src/akregator_view.h #1.64:1.65 @@ -57,5 +57,5 @@ namespace Akregator */ aKregatorView(aKregatorPart *part, QWidget *parent, const char *wName); - + ~aKregatorView(); void saveSettings(bool quit); @@ -286,4 +286,5 @@ namespace Akregator bool m_stopLoading; + bool m_shuttingDown; }; } --- kdenonbeta/akregator/src/myarticle.cpp #1.21:1.22 @@ -238,5 +238,5 @@ void MyArticle::dumpXmlData( QDomElement metanode = doc.createElement( "metaInfo:meta" ); metanode.setAttribute("type", "keep"); - metanode.appendChild(doc.createTextNode( d-> keep ? "true" : "false")); + metanode.appendChild(doc.createTextNode( d->keep ? "true" : "false")); parent.appendChild(metanode); }
When you quit while the article viewer is rendering, you get the backtrace above. When you quit while a page viewer is loading a page, you get the following: Using host libthread_db library "/lib/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread 16384 (LWP 23990)] [KCrash handler] #5 0x42e86f28 in QGList::find(void*, bool) () from /usr/qt/3/lib/libqt-mt.so.3 #6 0x41037f9e in KGlobal::registerStaticDeleter(KStaticDeleterBase*) () from /opt2/kde-cvs/lib/libkdecore.so.4 #7 0x4012b853 in KHTMLPageCache::self() () from /opt2/kde-cvs/lib/libkhtml.so.4 #8 0x400f1905 in KHTMLPart::closeURL() () from /opt2/kde-cvs/lib/libkhtml.so.4 #9 0x400ee77b in KHTMLPart::~KHTMLPart() () from /opt2/kde-cvs/lib/libkhtml.so.4 #10 0x41245a56 in Akregator::PageViewer::~PageViewer() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #11 0x4125ac5d in Akregator::aKregatorView::slotRemoveFrame() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #12 0x41256379 in Akregator::aKregatorView::~aKregatorView() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #13 0x404dc738 in KParts::Part::~Part() () from /opt2/kde-cvs/lib/libkparts.so.2 #14 0x404ddbfd in KParts::ReadOnlyPart::~ReadOnlyPart() () from /opt2/kde-cvs/lib/libkparts.so.2 #15 0x41250e4b in Akregator::aKregatorPart::~aKregatorPart() () from /opt2/kde-cvs/lib/kde3/libakregatorpart.so.1 #16 0x40801e7e in QPtrList<QObject>::deleteItem(void*) () from /opt2/kde-cvs/lib/libkabc.so.1 #17 0x42e86e8e in QGList::clear() () from /usr/qt/3/lib/libqt-mt.so.3 #18 0x4104596a in KLibrary::~KLibrary() () from /opt2/kde-cvs/lib/libkdecore.so.4 #19 0x41048a66 in KLibLoader::close_pending(KLibWrapPrivate*) () from /opt2/kde-cvs/lib/libkdecore.so.4 #20 0x410474fc in KLibLoader::~KLibLoader() () from /opt2/kde-cvs/lib/libkdecore.so.4 #21 0x410464d8 in KLibLoader::cleanUp() () from /opt2/kde-cvs/lib/libkdecore.so.4 #22 0x40f80e41 in KApplication::~KApplication() () from /opt2/kde-cvs/lib/libkdecore.so.4 #23 0x4104c5f7 in KUniqueApplication::~KUniqueApplication() () from /opt2/kde-cvs/lib/libkdecore.so.4 #24 0x08050ed9 in aKregatorApp::~aKregatorApp() () #25 0x08164290 in ?? () #26 0xbffff2c8 in ?? () #27 0x0805059e in main ()
I can confirm this bug. It was not there in 1.0-beta6.
CVS commit by osterfeld: Yay! (Don't crash on exit when a part is loading) BUG: 91660 M +3 -6 akregator.cpp 1.70 --- kdenonbeta/akregator/src/akregator.cpp #1.69:1.70 @@ -141,9 +141,5 @@ void AkregatorMainWindow::loadStandardFi AkregatorMainWindow::~AkregatorMainWindow() -{ - kdDebug() << "AkregatorMainWindow::~AkregatorMainWindow: delete part" << endl; - delete m_part; - kdDebug() << "AkregatorMainWindow::~AkregatorMainWindow: part deleted" << endl; -} +{} void AkregatorMainWindow::setCaption(const QString &a) @@ -288,4 +284,5 @@ bool AkregatorMainWindow::queryExit() static_cast<Akregator::aKregatorPart*>(m_part)->saveSettings(); + delete m_part; // delete that here instead of dtor to ensure nested khtmlparts are deleted before singleton objects like KHTMLPageCache return KParts::MainWindow::queryExit(); }
Crash on exit. Backtrace follows: (no debugging symbols found) Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread 906233536 (LWP 16141)] [KCrash handler] #6 0x37d2e6b0 in malloc_usable_size () from /lib/tls/i686/cmov/libc.so.6 #7 0x37d2ed50 in malloc_usable_size () from /lib/tls/i686/cmov/libc.so.6 #8 0x37d2f34a in free () from /lib/tls/i686/cmov/libc.so.6 #9 0x371429b1 in QtFontStyle::~QtFontStyle () from /usr/lib/libqt-mt.so.3 #10 0x37142a33 in QtFontFoundry::~QtFontFoundry () from /usr/lib/libqt-mt.so.3 #11 0x37142ab9 in QtFontFamily::~QtFontFamily () from /usr/lib/libqt-mt.so.3 #12 0x37142b76 in QFontDatabasePrivate::~QFontDatabasePrivate () from /usr/lib/libqt-mt.so.3 #13 0x371436f0 in QSingleCleanupHandler<QFontDatabasePrivate>::~QSingleCleanupHandler () from /usr/lib/libqt-mt.so.3 #14 0x371424de in QFontDatabase::pointSizes () from /usr/lib/libqt-mt.so.3 #15 0x37cf7844 in __cxa_finalize () from /lib/tls/i686/cmov/libc.so.6 #16 0x37093b9f in ?? () from /usr/lib/libqt-mt.so.3 #17 0x37639d40 in ?? () from /usr/lib/libqt-mt.so.3 #18 0x3762bfbc in ?? () from /usr/lib/libqt-mt.so.3 #19 0x3f9e89f8 in ?? () #20 0x375539a3 in _fini () from /usr/lib/libqt-mt.so.3 #21 0x375539a3 in _fini () from /usr/lib/libqt-mt.so.3 #22 0x37fe18f4 in _dl_rtld_di_serinfo () from /lib/ld-linux.so.2 #23 0x37cf75d7 in exit () from /lib/tls/i686/cmov/libc.so.6 #24 0x37ce0eac in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6 #25 0x08050031 in ?? ()