Summary: | kmail sometimes freezes when deleting messages | ||
---|---|---|---|
Product: | [Unmaintained] kmail | Reporter: | Richard Lärkäng <larkang> |
Component: | general | Assignee: | kdepim bugs <kdepim-bugs> |
Status: | RESOLVED WORKSFORME | ||
Severity: | normal | CC: | andy, bjoern, greg_g |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Richard Lärkäng
2004-11-01 19:43:15 UTC
Today when I got the freeze again, and attached gdb to it, I got the same backtrace except for the last line, and it showed that it was looping on line 1295 of qlistview.cpp instead: while( nextChild && *nextChild && item != *nextChild ) nextChild = &((*nextChild)->siblingItem); and it was looping between 3 items. If I remember correctly, I first removed the first message in a thread, and when trying to delete the second one it froze, but I'm not entirely sure. Haven't seen this one in a while, closing. I'm seeing this bug in 3.4.0, could you please reopen? It happened also in previous versions (both kmail standalone and in kontact), and is not easily reproduceable. The backtrace I get is the same: #0 0xb6a4dac0 in QListViewItem::takeItem(QListViewItem*) () from /usr/qt/3/lib/libqt-mt.so.3 #1 0xb6a4d394 in QListViewItem::~QListViewItem() () from /usr/qt/3/lib/libqt-mt.so.3 #2 0xb7261461 in KListViewItem::~KListViewItem() () from /usr/kde/3.4/lib/libkdeui.so.4 #3 0xb5a8a893 in KMail::HeaderItem::~HeaderItem() () from /usr/kde/3.4/lib/libkmailprivate.so #4 0xb5a7e9af in KMHeaders::msgRemoved(int, QString) () from /usr/kde/3.4/lib/libkmailprivate.so #5 0xb5a88fa6 in KMHeaders::qt_invoke(int, QUObject*) () from /usr/kde/3.4/lib/libkmailprivate.so #6 0xb69794b5 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/qt/3/lib/libqt-mt.so.3 #7 0xb5abe5bb in KMFolder::msgRemoved(int, QString) () from /usr/kde/3.4/lib/libkmailprivate.so #8 0xb5abed19 in KMFolder::qt_emit(int, QUObject*) () from /usr/kde/3.4/lib/libkmailprivate.so #9 0xb69794ed in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/qt/3/lib/libqt-mt.so.3 #10 0xb5ad8d5f in FolderStorage::msgRemoved(int, QString) () from /usr/kde/3.4/lib/libkmailprivate.so #11 0xb5ad5eff in FolderStorage::take(int) () from /usr/kde/3.4/lib/libkmailprivate.so #12 0xb5b74ea2 in KMFolderMaildir::take(int) () from /usr/kde/3.4/lib/libkmailprivate.so #13 0xb5abc777 in KMFolder::take(int) () from /usr/kde/3.4/lib/libkmailprivate.so #14 0xb5b71bb9 in KMFolderMaildir::addMsgInternal(KMMessage*, int*, bool) () from /usr/kde/3.4/lib/libkmailprivate.so #15 0xb5b71612 in KMFolderMaildir::addMsg(KMMessage*, int*) () It seems to occur in the following situation (it's a necessary but not sufficient condition, though): message A is parent of message B in a thread, but B is not a reply to A: they are both replies to the same old message and got threaded together. Delete A, B gets focus, and kmail freezes. Reported in 3.4. Reopen. This happened again with kdepim 3.5-branch from around rc1. It got stuck this time too in QListView::itemAbove, where it was stuck in: while( c && c->siblingItem != this ) c = c->siblingItem; because c was the same as c->siblingItem. So I added asserts in qlistview.cpp everywhere where siblingItem was assigned to something, to check if there were any assignments of the kind item->siblingItem = item And the assert was triggered when trying to delete the same message again with this backtrace: Using host libthread_db library "/lib/tls/libthread_db.so.1". `system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols. [Thread debugging using libthread_db enabled] [New Thread -1252845856 (LWP 15531)] [KCrash handler] #4 0xffffe410 in __kernel_vsyscall () #5 0xb5d96391 in raise () from /lib/tls/libc.so.6 #6 0xb5d97dad in abort () from /lib/tls/libc.so.6 #7 0xb5d8fc62 in __assert_fail () from /lib/tls/libc.so.6 #8 0xb6615fe8 in QListViewItem::insertItem (this=0x857a5a8, newChild=0x85940e0) at qlistview.cpp:1176 #9 0xb661ba30 in QListView::insertItem (this=0x8577de0, i=0x85940e0) at qlistview.cpp:3203 #10 0xb4dc5117 in KMHeaders::msgRemoved (this=0x8577de0, id=2, msgId= {static null = {static null = <same as static member of an already seen type>, d = 0x8074388, static shared_null = 0x8074388}, d = 0x853d408, static shared_null = 0x8074388}) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmheaders.cpp:1088 #11 0xb4dcf20d in KMHeaders::qt_invoke (this=0x8577de0, _id=112, _o=0xbf9cdfb0) at kmheaders.moc:301 #12 0xb652ac1f in QObject::activate_signal (this=0x853ced8, clist=0x86a2490, o=0xbf9cdfb0) at qobject.cpp:2356 #13 0xb4e01685 in KMFolder::msgRemoved (this=0x853ced8, t0=2, t1= {static null = {static null = <same as static member of an already seen type>, d = 0x8074388, static shared_null = 0x8074388}, d = 0x853d408, static shared_null = 0x8074388}) at kmfolder.moc:254 #14 0xb4e02047 in KMFolder::qt_emit (this=0x853ced8, _id=9, _o=0xbf9ce0d0) at kmfolder.moc:381 #15 0xb652abf3 in QObject::activate_signal (this=0x853cfe0, clist=0x853d740, o=0xbf9ce0d0) at qobject.cpp:2354 #16 0xb4e1e745 in FolderStorage::msgRemoved (this=0x853cfe0, t0=2, t1= {static null = {static null = <same as static member of an already seen type>, d = 0x8074388, static shared_null = 0x8074388}, d = 0x853d408, static shared_null = 0x8074388}) at folderstorage.moc:320 #17 0xb4e1b283 in FolderStorage::take (this=0x853cfe0, idx=2) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/folderstorage.cpp:441 #18 0xb4ecdd3c in KMFolderMaildir::take (this=0x853cfe0, idx=2) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmfoldermaildir.cpp:941 #19 0xb4dff93e in KMFolder::take (this=0x853ced8, idx=2) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmfolder.cpp:364 #20 0xb4ecb2a9 in KMFolderMaildir::addMsgInternal (this=0x851d040, aMsg=0x8627720, index_return=0xbf9ce450, stripUid=false) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmfoldermaildir.cpp:453 #21 0xb4ecab75 in KMFolderMaildir::addMsg (this=0x851d040, aMsg=0x8627720, index_return=0xbf9ce450) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmfoldermaildir.cpp:365 #22 0xb4e1baab in FolderStorage::moveMsg (this=0x851d040, aMsg=0x8627720, aIndex_ret=0xbf9ce450) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/folderstorage.cpp:590 #23 0xb4dffb25 in KMFolder::moveMsg (this=0x851cf38, msg=0x8627720, index_return=0xbf9ce450) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmfolder.cpp:409 #24 0xb4f4def0 in KMMoveCommand::execute (this=0x87c8970) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmcommands.cpp:1924 #25 0xb4f45468 in KMCommand::slotPostTransfer (this=0x87c8970, result=KMCommand::OK) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmcommands.cpp:254 #26 0xb4f555b3 in KMCommand::qt_invoke (this=0x87c8970, _id=5, _o=0xbf9ce620) at kmcommands.moc:148 #27 0xb4f5922f in KMMenuCommand::qt_invoke (this=0x87c8970, _id=5, _o=0xbf9ce620) at kmcommands.moc:2436 #28 0xb4f59771 in KMMoveCommand::qt_invoke (this=0x87c8970, _id=5, _o=0xbf9ce620) at kmcommands.moc:2619 #29 0xb4f59967 in KMDeleteMsgCommand::qt_invoke (this=0x87c8970, _id=5, _o=0xbf9ce620) at kmcommands.moc:2694 #30 0xb652ac1f in QObject::activate_signal (this=0x87c8970, clist=0x874a8c8, o=0xbf9ce620) at qobject.cpp:2356 #31 0xb4f553b9 in KMCommand::messagesTransfered (this=0x87c8970, t0=KMCommand::OK) at kmcommands.moc:126 #32 0xb4f459b3 in KMCommand::transferSelectedMsgs (this=0x87c8970) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmcommands.cpp:349 #33 0xb4f45411 in KMCommand::slotStart (this=0x87c8970) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kmail/kmcommands.cpp:246 #34 0xb4f55583 in KMCommand::qt_invoke (this=0x87c8970, _id=4, _o=0xbf9ce830) at kmcommands.moc:147 #35 0xb4f5922f in KMMenuCommand::qt_invoke (this=0x87c8970, _id=4, _o=0xbf9ce830) at kmcommands.moc:2436 #36 0xb4f59771 in KMMoveCommand::qt_invoke (this=0x87c8970, _id=4, _o=0xbf9ce830) at kmcommands.moc:2619 #37 0xb4f59967 in KMDeleteMsgCommand::qt_invoke (this=0x87c8970, _id=4, _o=0xbf9ce830) at kmcommands.moc:2694 #38 0xb652ac1f in QObject::activate_signal (this=0x827fbd8, clist=0x86c9848, o=0xbf9ce830) at qobject.cpp:2356 #39 0xb6899517 in QSignal::signal (this=0x827fbd8, t0=@0x827fc00) at moc_qsignal.cpp:100 #40 0xb65489d2 in QSignal::activate (this=0x827fbd8) at qsignal.cpp:212 #41 0xb6550b34 in QSingleShotTimer::event (this=0x827fbb0) at qtimer.cpp:286 #42 0xb64c5ae9 in QApplication::internalNotify (this=0xbf9ceda0, receiver=0x827fbb0, e=0xbf9ceaf0) at qapplication.cpp:2635 #43 0xb64c502a in QApplication::notify (this=0xbf9ceda0, receiver=0x827fbb0, e=0xbf9ceaf0) at qapplication.cpp:2358 #44 0xb6bccd20 in KApplication::notify (this=0xbf9ceda0, receiver=0x827fbb0, event=0xbf9ceaf0) at /home/richard/kde-svn/svn/trunk/KDE/kdelibs/kdecore/kapplication.cpp:550 #45 0xb7848432 in QApplication::sendEvent (receiver=0x827fbb0, event=0xbf9ceaf0) at qapplication.h:496 #46 0xb64b3e3c in QEventLoop::activateTimers (this=0x81e6018) at qeventloop_unix.cpp:556 #47 0xb6469fec in QEventLoop::processEvents (this=0x81e6018, flags=4) at qeventloop_x11.cpp:389 #48 0xb64dadb3 in QEventLoop::enterLoop (this=0x81e6018) at qeventloop.cpp:198 #49 0xb64dacce in QEventLoop::exec (this=0x81e6018) at qeventloop.cpp:145 #50 0xb64c5c55 in QApplication::exec (this=0xbf9ceda0) at qapplication.cpp:2758 #51 0x0805cb91 in main (argc=1, argv=0xbf9cef74) at /home/richard/kde-svn/svn/trunk/KDE/kdepim/kontact/src/main.cpp:177 #52 0xb5d82f31 in __libc_start_main () from /lib/tls/libc.so.6 #53 0x0805bfe1 in _start () Line 1177 in qlistview.cpp is: newChild->siblingItem = childItem; and the assert was triggered because newChild was equal to childItem. And around line 1088 in kmheaders.cpp is: 1084 if ( parent && parent->item() != item && parent->item() != removedItem ) { 1085 parent->item()->insertItem(lvi); 1086 parent->addSortedChild( sci ); 1087 } else { 1088 insertItem(lvi); 1089 mRoot->addSortedChild( sci ); 1090 } So as far as I understand it, it tries to add an item to the root of the listview when it's already a child of the listview. Also, looking at the thread I was trying to delete, the message I tried to delete was the parent of two messages when using "Thread messages also by Subject", but when unchecking subject-threading it was only the parent of one of them. *** Bug 137144 has been marked as a duplicate of this bug. *** The same bug just happened to me (KDE-3.5.5 in Debian testing). Here is the backtrace: #0 0xb70e5d5b in QListViewItem::takeItem (this=0x849e578, item=0x84b6540) at widgets/qlistview.cpp:1323 lv = (class QListView *) 0x849c3b8 emit_changed = true nextChild = (QListViewItem **) 0x8634930 #1 0xb70d5286 in ~QListViewItem (this=0x84b6540) at widgets/qlistview.cpp:1020 No locals. #2 0xb68313fd in ~KListViewItem (this=0x84b6540) at /home/ana/Debian/kdelibs/kdelibs-3.5.5a.dfsg.1/./kdeui/klistview.cpp:2206 No locals. #3 0xb5422d4b in KMail::HeaderItem::~HeaderItem () from /usr/lib/libkmailprivate.so No symbol table info available. #4 0xb540c625 in KMHeaders::msgRemoved () from /usr/lib/libkmailprivate.so No symbol table info available. #5 0xb5506779 in KMHeaders::qt_invoke () from /usr/lib/libkmailprivate.so No symbol table info available. #6 0xb6fddd4f in QObject::activate_signal (this=0x83dd910, clist=0x8728960, o=0xbfd381b0) at kernel/qobject.cpp:2356 object = (class QObject *) 0x849c3b8 sol = (QSenderObjectList *) 0x849d010 oldSender = (class QObject *) 0x0 c = (QConnection *) 0x85fc688 #7 0xb531c120 in KMFolder::msgRemoved () from /usr/lib/libkmailprivate.so No symbol table info available. #8 0xb540174d in KMFolder::qt_emit () from /usr/lib/libkmailprivate.so No symbol table info available. #9 0xb6fddd23 in QObject::activate_signal (this=0x83e3ec8, clist=0x83dca30, o=0xbfd382a0) at kernel/qobject.cpp:2354 object = (class QObject *) 0x83dd910 sol = (QSenderObjectList *) 0x83de1f8 oldSender = (class QObject *) 0x0 c = (QConnection *) 0x83de0f8 #10 0xb531b230 in FolderStorage::msgRemoved () from /usr/lib/libkmailprivate.so No symbol table info available. #11 0xb547947b in FolderStorage::take () from /usr/lib/libkmailprivate.so No symbol table info available. #12 0xb55288cc in KMFolderMaildir::take () from /usr/lib/libkmailprivate.so No symbol table info available. #13 0xb52d348e in KMFolder::take () from /usr/lib/libkmailprivate.so No symbol table info available. #14 0xb5519e66 in KMFolderMaildir::addMsgInternal () from /usr/lib/libkmailprivate.so No symbol table info available. #15 0xb551a7a5 in KMFolderMaildir::addMsg () from /usr/lib/libkmailprivate.so No symbol table info available. |