| Summary: | KMail crashes at startup with more than one IMAP account | ||
|---|---|---|---|
| Product: | [Unmaintained] kmail | Reporter: | Andre Woebbeking <woebbeking> |
| Component: | IMAP | Assignee: | kdepim bugs <pim-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: | startupfix.diff | ||
Same result here (KDE 3.3.0_beta2, Gentoo linux), even though maybe different cause: Using host libthread_db library "/lib/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread 16384 (LWP 18320)] 0x419f8008 in waitpid () from /lib/libpthread.so.0 #0 0x419f8008 in waitpid () from /lib/libpthread.so.0 #1 0x40c17320 in __JCR_LIST__ () from /usr/kde/3.3/lib/libkdecore.so.4 #2 0x40b3c52a in KCrash::defaultCrashHandler(int) () from /usr/kde/3.3/lib/libkdecore.so.4 #3 0x40c1d5e4 in kde_malloc_is_used () from /usr/kde/3.3/lib/libkdecore.so.4 #4 0x00000010 in ?? () #5 0x40c1d600 in spinlock () from /usr/kde/3.3/lib/libkdecore.so.4 #6 0x40c17320 in __JCR_LIST__ () from /usr/kde/3.3/lib/libkdecore.so.4 #7 0x40c1d5e4 in kde_malloc_is_used () from /usr/kde/3.3/lib/libkdecore.so.4 #8 0x00000001 in ?? () @Urs Joss: please compile kmail with --enable-debug=yes to get a better backtrace. This one if from one day old CVS:
#3 0x410f8236 in QListViewItem (this=0x8578798, parent=0x84d8468, label1=)
at widgets/qlistview.cpp:592
#4 0x408b68d6 in KListViewItem (this=0x8578798, parent=0x0, label1=)
at /src/kde/kdelibs/kdeui/klistview.cpp:2092
#5 0x41eb7ecb in KFolderTreeItem (this=0x8578798, parent=0x0, label=@0x0,
protocol=Imap, type=Inbox, unread=0, total=0)
at /src/kde/kdepim/libkdenetwork/kfoldertree.cpp:26
#6 0x42100bcd in KMFolderTreeItem (this=0x8578770, parent=0x0,
name=@0xbfffef90, folder=0x0) at /src/kde/kdepim/kmail/kmfoldertree.cpp:69
#7 0x42108351 in KMFolderTree::addDirectory (this=0x8432da8, fdir=0x834ccb0,
parent=0x84d8440) at /src/kde/kdepim/kmail/kmfoldertree.cpp:556
#8 0x42108417 in KMFolderTree::addDirectory (this=0x8432da8, fdir=0x834adbc,
parent=0x0) at kmfolder.h:95
#9 0x421037f8 in KMFolderTree::reload (this=0x8432da8, openFolders=false)
at /src/kde/kdepim/kmail/kmfoldertree.cpp:443
#10 0x422d5d53 in KMMainWidget::slotShowStartupFolder (this=0x83d5398)
at /src/kde/kdepim/kmail/kmmainwidget.cpp:3144
Andre, does changing the startup folder to something local "fix" the crash? On Wednesday 04 August 2004 17:32, Till Adam wrote:
> Andre, does changing the startup folder to something local
> "fix" the crash?
Huh, I didn't know that is possible. Right now I cancel the first IMAP
login and login when the second login is finished.
Does the attached patch fix the crash (cvs HEAD)? Created an attachment (id=7014) startupfix.diff > Additional Comments From burghardt kde org 2004-08-05 23:57
> Does the attached patch fix the crash (cvs HEAD)?
I started Kontact several times and had no crash with your patch :-)
CVS commit by burghard: Do not crash during startup. This patch is rather intrusive but I do not see a chance to fix it without rewriting some stuff. It also fixes a bug that I noticed recently: when an imap folder is selected and you expand a different imap folder the readerwin was cleared. I will backport this in a minute. CCMAIL: 85803-done@bugs.kde.org M +32 -0 kmfoldertree.cpp 1.314 M +4 -0 kmfoldertree.h 1.84 M +13 -21 kmmainwidget.cpp 1.251 --- kdepim/kmail/kmfoldertree.cpp #1.313:1.314 @@ -245,4 +245,5 @@ KMFolderTree::KMFolderTree( KMMainWidget mLastItem = 0; mMainWidget = mainWidget; + mReloading = false; addAcceptableDropMimetype(MailListDrag::format(), false); @@ -424,4 +425,11 @@ void KMFolderTree::updateUnreadAll() void KMFolderTree::reload(bool openFolders) { + if ( mReloading ) { + // no parallel reloads are allowed + kdDebug(5006) << "KMFolderTree::reload - already reloading" << endl; + return; + } + mReloading = true; + int top = contentsY(); mLastItem = 0; @@ -430,4 +438,6 @@ void KMFolderTree::reload(bool openFolde writeIsListViewItemOpen( fti ); } + // remember last + KMFolder* last = currentFolder(); clear(); @@ -507,4 +517,12 @@ void KMFolderTree::reload(bool openFolde ensureVisible(0, top + visibleHeight(), 0, 0); refresh(); + if ( last ) + { + // if the current folder did not change set it again + for ( QListViewItemIterator it( this ) ; it.current() ; ++it ) + if ( static_cast<KMFolderTreeItem*>( it.current() )->folder() == last ) + mLastItem = static_cast<KMFolderTreeItem*>( it.current() ); + } + mReloading = false; } @@ -1100,4 +1118,6 @@ void KMFolderTree::writeIsListViewItemOp void KMFolderTree::cleanupConfigFile() { + if ( childCount() == 0 ) + return; // just in case reload wasn't called before KConfig* config = KMKernel::config(); QStringList existingFolders; @@ -1606,4 +1626,16 @@ void KMFolderTree::slotResetFolderList( } +//----------------------------------------------------------------------------- +void KMFolderTree::showFolder( KMFolder* folder ) +{ + if ( !folder ) return; + QListViewItem* item = indexOfFolder( folder ); + if ( item ) + { + doFolderSelected( item ); + ensureItemVisible( item ); + } +} + #include "kmfoldertree.moc" --- kdepim/kmail/kmfoldertree.h #1.83:1.84 @@ -155,4 +155,7 @@ public: KMMainWidget * mainWidget() const { return mMainWidget; } + /** Select the folder and make sure it's visible */ + void showFolder( KMFolder* ); + signals: /** The selected folder has changed */ @@ -311,4 +314,5 @@ private: bool mShowPopupAfterDnD; KMMainWidget *mMainWidget; + bool mReloading; }; --- kdepim/kmail/kmmainwidget.cpp #1.250:1.251 @@ -370,11 +369,7 @@ void KMMainWidget::readConfig(void) } + // reload foldertree mFolderTree->reload(); - QListViewItem *qlvi = mFolderTree->indexOfFolder(mFolder); - if (qlvi!=0) { - mFolderTree->setCurrentItem(qlvi); - mFolderTree->setSelected(qlvi,TRUE); - } - + mFolderTree->showFolder( mFolder ); // sanders - New code @@ -3140,13 +3135,4 @@ void KMMainWidget::slotIntro() void KMMainWidget::slotShowStartupFolder() { - if (mFolderTree) { - // add the folders - mFolderTree->reload(); - // read the config - mFolderTree->readConfig(); - // get rid of old-folders - mFolderTree->cleanupConfigFile(); - } - connect( kmkernel->filterMgr(), SIGNAL( filterListUpdated() ), this, SLOT( initializeFilterActions() )); @@ -3161,12 +3147,18 @@ void KMMainWidget::slotShowStartupFolder KMFolder* startup = 0; - if (!mStartupFolder.isEmpty()) { + if ( !mStartupFolder.isEmpty() ) { // find the startup-folder - startup = kmkernel->findFolderById(mStartupFolder); + startup = kmkernel->findFolderById( mStartupFolder ); } - if (!startup) + if ( !startup ) startup = kmkernel->inboxFolder(); - mFolderTree->doFolderSelected(mFolderTree->indexOfFolder(startup)); - mFolderTree->ensureItemVisible(mFolderTree->indexOfFolder(startup)); + + if ( mFolderTree ) + { + mFolderTree->reload(); + mFolderTree->showFolder( startup ); + // get rid of old-folders + mFolderTree->cleanupConfigFile(); + } } |
Version: unknown (using KDE 3.2.92 (3.3 beta2), compiled sources) Compiler: gcc version 3.4.1 (Debian 3.4.1-2) OS: Linux (i686) release 2.6.7-1-k7 Hi, I've two IMAP accounts. If I start KMail it asks for the passwords of the accounts. If I enter them fast enough KMail crashes: 3 0x408a8684 in KListView::dragEnabled (this=0x0) at /src/kde/kdelibs/kdeui/klistview.cpp:1161 #4 0x408abf48 in KListViewItem::init (this=0x85429b8) at /src/kde/kdelibs/kdeui/klistview.cpp:2117 #5 0x408ace8b in KListViewItem (this=0x85429b8, parent=0x0, label1=) at /src/kde/kdelibs/kdeui/klistview.cpp:2088 #6 0x41ea1e9b in KFolderTreeItem (this=0x85429b8, parent=0x0, label=@0x0, protocol=Imap, type=Inbox, unread=0, total=0) at /src/kde/kdepim/libkdenetwork/kfoldertree.cpp:26 #7 0x420d4a8d in KMFolderTreeItem (this=0x8542990, parent=0x0, name=@0xbfffef90, folder=0x0) at /src/kde/kdepim/kmail/kmfoldertree.cpp:69 #8 0x420dc211 in KMFolderTree::addDirectory (this=0x8407cd0, fdir=0x8353800, parent=0x8537270) at /src/kde/kdepim/kmail/kmfoldertree.cpp:556 #9 0x420dc2d7 in KMFolderTree::addDirectory (this=0x8407cd0, fdir=0x831afdc, parent=0x0) at kmfolder.h:95 #10 0x420d76b8 in KMFolderTree::reload (this=0x8407cd0, openFolders=false) at /src/kde/kdepim/kmail/kmfoldertree.cpp:443 #11 0x422a9513 in KMMainWidget::slotShowStartupFolder (this=0x83a0ec8) at /src/kde/kdepim/kmail/kmmainwidget.cpp:3170