Bug 91660 - Crash after quit (with backtrace)
Summary: Crash after quit (with backtrace)
Status: RESOLVED FIXED
Alias: None
Product: akregator
Classification: Applications
Component: general (show other bugs)
Version: cvs
Platform: Unlisted Binaries Linux
: NOR crash
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-10-19 13:18 UTC by Frank Osterfeld
Modified: 2006-02-19 17:49 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Frank Osterfeld 2004-10-19 13:18:03 UTC
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?).
Comment 1 Frank Osterfeld 2004-10-19 22:02:09 UTC
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).
Comment 2 Frank Osterfeld 2004-10-19 22:23:29 UTC
It doesn't crash in Kontact, so I guess there is something wrong in the class aKregator.
Comment 3 Teemu Rytilahti 2004-10-25 18:28:09 UTC
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 ()
Comment 4 Frank Osterfeld 2004-10-30 15:33:35 UTC
In the Kontact plugin it doesn't crash. Thus I think the part handling/BrowserExtension code in AkregatorMainWindow causes the crash.
Comment 5 Frank Osterfeld 2004-11-01 17:33:50 UTC
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);
     }


Comment 6 Frank Osterfeld 2004-11-01 17:38:49 UTC
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 ()
Comment 7 Sebastian Stein 2004-11-17 13:02:01 UTC
I can confirm this bug. It was not there in 1.0-beta6.
Comment 8 Frank Osterfeld 2004-11-22 23:34:35 UTC
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();
 }


Comment 9 Christian D. 2006-02-19 17:49:26 UTC
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 ?? ()