Summary: | crashes on folder refresh | ||
---|---|---|---|
Product: | [Unmaintained] kmail | Reporter: | Grzegorz Jaskiewicz <gj> |
Component: | general | Assignee: | kdepim bugs <kdepim-bugs> |
Status: | RESOLVED DUPLICATE | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | 1.8.50 | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Grzegorz Jaskiewicz
2005-06-25 10:19:52 UTC
On Saturday 25 June 2005 10:19, Grzegorz Jaskiewicz wrote: > Oh, I got some new emails in INBOX. Click. Crash. Bug report. > > 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 -1243511104 (LWP 3592)] > [KCrash handler] > #3 0x00000000 in ?? () > #4 0xb551b455 in KMFolderImap::flagsToStatus (msg=0x91174d8, flags=32, > newMsg=true) at /home/gj/kde-sources/kdepim/kmail/kmfolderimap.cpp:1367 > #5 0xb5529824 in KMFolderImap::slotGetMessagesData (this=0x8535c80, > job=0x8e35ec0, data= 0x91174d8) > at /home/gj/kde-sources/kdepim/kmail/kmfolderimap.cpp:1499 > #6 0xb552e080 in KMFolderImap::qt_invoke (this=0x8535c80, _id=139680896, > _o=0x93b6638) at qucom_p.h:312 > #7 0xb66f1e7b in QObject::activate_signal (this=0x93b6638, > clist=0x8ee0c88, o=0xbfffece0) at kernel/qobject.cpp:2355 Carsten, another indication that folder refcounting is broken? SVN commit 429050 by burghard: Make getFolder handle it's own open/close sequence. That should fix current imap crashes. CCMAIL:108100@bugs.kde.org CCMAIL:107914@bugs.kde.org M +10 -8 kmfolderimap.cpp --- trunk/KDE/kdepim/kmail/kmfolderimap.cpp #429049:429050 @@ -984,6 +984,7 @@ { if (!mAccount) { emit folderComplete(this, false); + close(); return; } KURL url = mAccount->getUrl(); @@ -999,6 +1000,7 @@ kdDebug(5006) << "KMFolderImap::checkValidity - got no connection" << endl; emit folderComplete(this, FALSE); mContentState = imapNoInformation; + close(); return; } else if ( connectionState == ImapAccountBase::Connecting ) { // We'll wait for the connectionResult signal from the account. If it @@ -1011,6 +1013,7 @@ // Only check once at a time. if (mCheckingValidity) { kdDebug(5006) << "KMFolderImap::checkValidity - already checking" << endl; + close(); return; } // otherwise we already are inside a mailcheck @@ -1074,6 +1077,7 @@ } mContentState = imapNoInformation; emit folderComplete(this, FALSE); + close(); } else { QCString cstr((*it).data.data(), (*it).data.size() + 1); int a = cstr.find("X-uidValidity: "); @@ -1151,6 +1155,7 @@ emit folderComplete(this, true); return; } + open(); mContentState = imapInProgress; if (force) { // force an update @@ -1168,6 +1173,7 @@ { mContentState = imapNoInformation; emit folderComplete(this, FALSE); + close(); return; } quiet(true); @@ -1218,6 +1224,7 @@ mContentState = imapNoInformation; emit folderComplete(this, FALSE); mAccount->removeJob(it); + close(); return; } mCheckFlags = FALSE; @@ -1274,6 +1281,7 @@ mContentState = imapFinished; emit folderComplete(this, TRUE); mAccount->removeJob(it); + close(); return; } if ( mMailCheckProgressItem ) @@ -1291,14 +1299,6 @@ else sets = makeSets( (*it).items ); mAccount->removeJob(it); // don't use *it below - // make sure we have a connection - if ( mAccount->makeConnection() != ImapAccountBase::Connected ) - { - quiet(false); - emit folderComplete(this, FALSE); - return; - } - // Now kick off the getting of envelopes for the new mails in the folder for (QStringList::Iterator i = sets.begin(); i != sets.end(); ++i) { @@ -1580,6 +1580,7 @@ mContentState = imapNoInformation; quiet( false ); emit folderComplete(this, false); + close(); } else { @@ -1588,6 +1589,7 @@ mContentState = imapFinished; quiet(false); emit folderComplete(this, true); + close(); } mAccount->removeJob(it); } fixing database |