[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