[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: Re: [Bug 48307] kmail crashed after changing from an imap folder busy with copying to a local local
From: Carsten Burghardt <cb () magic-shop ! de>
Date: 2002-10-15 20:04:51
[Download RAW message or body]
On Tuesday 15 October 2002 07:56, Carsten Burghardt wrote:
> Small correction, I forgot to reset the flag.
As I just commited the undo-stuff, here is the separate patch.
--
Regards,
Carsten Burghardt
["close.diff" (text/x-diff)]
Index: kdenetwork/kmail/kmfolderimap.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfolderimap.cpp,v
retrieving revision 1.73
diff -u -3 -p -r1.73 kmfolderimap.cpp
--- kdenetwork/kmail/kmfolderimap.cpp 2002/10/15 19:49:02 1.73
+++ kdenetwork/kmail/kmfolderimap.cpp 2002/10/15 20:02:51
@@ -47,6 +47,7 @@ KMFolderImap::KMFolderImap(KMFolderDir*
mIsSelected = FALSE;
mLastUid = 0;
mCheckFlags = TRUE;
+ mDeferredClose = FALSE;
KConfig* config = kapp->config();
KConfigGroupSaver saver(config, "Folder-" + idString());
@@ -164,6 +165,7 @@ void KMFolderImap::removeMsg(QPtrList<KM
//-----------------------------------------------------------------------------
void KMFolderImap::addMsgQuiet(KMMessage* aMsg)
{
+ mContentState = imapFinished;
KMFolder *folder = aMsg->parent();
if (folder)
{
@@ -178,11 +180,13 @@ void KMFolderImap::addMsgQuiet(KMMessage
delete aMsg;
aMsg = 0;
getFolder();
+ if (mDeferredClose) close();
}
//-----------------------------------------------------------------------------
void KMFolderImap::addMsgQuiet(QPtrList<KMMessage> msgList)
{
+ mContentState = imapFinished;
KMFolder *folder = msgList.first()->parent();
if (folder)
{
@@ -200,6 +204,7 @@ void KMFolderImap::addMsgQuiet(QPtrList<
msgList.setAutoDelete(true);
msgList.clear();
getFolder();
+ if (mDeferredClose) close();
}
//-----------------------------------------------------------------------------
@@ -211,6 +216,7 @@ int KMFolderImap::addMsg(KMMessage* aMsg
int KMFolderImap::addMsg(QPtrList<KMMessage>& msgList, int* aIndex_ret)
{
+ mContentState = imapInProgress;
KMMessage *aMsg = msgList.getFirst();
KMFolder *msgParent = aMsg->parent();
@@ -297,6 +303,7 @@ int KMFolderImap::addMsg(QPtrList<KMMess
//-----------------------------------------------------------------------------
void KMFolderImap::copyMsg(QPtrList<KMMessage>& msgList)
{
+ mContentState = imapInProgress;
QValueList<int> uids;
getUids(msgList, uids);
QStringList sets = makeSets(uids, false);
@@ -1045,6 +1052,19 @@ QValueList<int> KMFolderImap::splitSets(
}
return uidlist;
+}
+
+//-----------------------------------------------------------------------------
+void KMFolderImap::close(bool force)
+{
+ if (mContentState == imapInProgress)
+ {
+ // this folder has some transfer in progress, so we close it later
+ mDeferredClose = TRUE;
+ } else {
+ mDeferredClose = FALSE;
+ KMFolderImapInherited::close(force);
+ }
}
//-----------------------------------------------------------------------------
Index: kdenetwork/kmail/kmfolderimap.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfolderimap.h,v
retrieving revision 1.32
diff -u -3 -p -r1.32 kmfolderimap.h
--- kdenetwork/kmail/kmfolderimap.h 2002/10/15 19:49:02 1.32
+++ kdenetwork/kmail/kmfolderimap.h 2002/10/15 20:02:51
@@ -234,6 +234,11 @@ public:
*/
static QValueList<int> splitSets(QString);
+ /**
+ * Reimplemented
+ */
+ virtual void close(bool force=FALSE);
+
signals:
void folderComplete(KMFolderImap *folder, bool success);
@@ -351,6 +356,7 @@ protected:
bool mReadOnly;
QGuardedPtr<KMAcctImap> mAccount;
QIntDict<ulong> uidmap;
+ bool mDeferredClose;
};
#endif // kmfolderimap_h
_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic