don't make thread enumerator hold a ref to db object, breaks cycle that holds db's open, r/sr=neil, 266679

This commit is contained in:
bienvenu%nventure.com 2005-09-20 13:05:16 +00:00
Родитель e1c40a995b
Коммит d4d866f7e3
1 изменённых файлов: 4 добавлений и 4 удалений

Просмотреть файл

@ -934,6 +934,7 @@ nsMsgDatabase::~nsMsgDatabase()
if (m_dbFolderInfo)
m_dbFolderInfo->ReleaseExternalReferences();
NotifyAnnouncerGoingAway();
NS_IF_RELEASE(m_dbFolderInfo);
if (m_HeaderParser)
{
@ -954,7 +955,6 @@ nsMsgDatabase::~nsMsgDatabase()
m_mdbEnv->Release(); //??? is this right?
m_mdbEnv = nsnull;
}
NotifyAnnouncerGoingAway();
if (m_ChangeListeners)
{
//better not be any listeners, because we're going away.
@ -2773,7 +2773,7 @@ public:
protected:
nsresult GetTableCursor(void);
nsresult PrefetchNext();
nsMsgDatabase* mDB;
nsMsgDatabase* mDB;
nsIMdbPortTableCursor* mTableCursor;
nsIMsgThread* mResultThread;
PRBool mDone;
@ -2786,7 +2786,6 @@ nsMsgDBThreadEnumerator::nsMsgDBThreadEnumerator(nsMsgDatabase* db,
: mDB(db), mTableCursor(nsnull), mResultThread(nsnull), mDone(PR_FALSE),
mFilter(filter)
{
NS_ADDREF(mDB);
mDB->AddListener(this);
mNextPrefetched = PR_FALSE;
}
@ -2795,7 +2794,8 @@ nsMsgDBThreadEnumerator::~nsMsgDBThreadEnumerator()
{
mTableCursor->Release();
NS_IF_RELEASE(mResultThread);
NS_IF_RELEASE(mDB);
if (mDB)
mDB->RemoveListener(this);
}
NS_IMPL_ISUPPORTS2(nsMsgDBThreadEnumerator, nsISimpleEnumerator, nsIDBChangeListener)