mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 20:35:50 +00:00
1. remove extra monitors (47825)
2. add method to determine if manager has been shutdown (44680) 3. Add nsCOMPtr to avoid leak (44680, 43244) r=valeski@netscape.com
This commit is contained in:
parent
bb06aba776
commit
283ecd2375
@ -196,12 +196,14 @@ nsProxyEventClass::~nsProxyEventClass()
|
||||
if(mDescriptors && mDescriptors != &zero_methods_descriptor)
|
||||
delete [] mDescriptors;
|
||||
|
||||
if (nsProxyObjectManager::IsManagerShutdown())
|
||||
return;
|
||||
|
||||
#ifndef LIFETIME_CACHE
|
||||
nsIDKey key(mIID);
|
||||
|
||||
nsProxyObjectManager *manager = nsProxyObjectManager::GetInstance();
|
||||
|
||||
nsCOMPtr<nsProxyObjectManager> manager = getter_AddRefs(nsProxyObjectManager::GetInstance());
|
||||
if (manager == nsnull) return;
|
||||
nsAutoLock lock(manager->GetMapLock());
|
||||
nsHashtable *iidToClassMap = manager->GetIIDToProxyClassMap();
|
||||
|
||||
if (iidToClassMap != nsnull)
|
||||
|
@ -146,7 +146,6 @@ nsProxyEventObject::GetNewOrUsedProxy(nsIEventQueue *destQueue,
|
||||
/* get our hash table */
|
||||
nsProxyObjectManager *manager = nsProxyObjectManager::GetInstance();
|
||||
if (manager == nsnull) return nsnull;
|
||||
nsAutoLock lock(manager->GetMapLock());
|
||||
nsHashtable *realToProxyMap = manager->GetRealObjectToProxyObjectMap();
|
||||
if (realToProxyMap == nsnull) return nsnull;
|
||||
|
||||
@ -321,15 +320,17 @@ DebugDump("Delete", 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
nsProxyObjectManager *manager = nsProxyObjectManager::GetInstance();
|
||||
nsAutoLock lock(manager->GetMapLock());
|
||||
nsHashtable *realToProxyMap = manager->GetRealObjectToProxyObjectMap();
|
||||
|
||||
if (realToProxyMap != nsnull && mHashKey.HashValue() != 0)
|
||||
if (! nsProxyObjectManager::IsManagerShutdown())
|
||||
{
|
||||
realToProxyMap->Remove(&mHashKey);
|
||||
nsCOMPtr<nsProxyObjectManager> manager = nsProxyObjectManager::GetInstance();
|
||||
nsHashtable *realToProxyMap = manager->GetRealObjectToProxyObjectMap();
|
||||
|
||||
if (realToProxyMap != nsnull && mHashKey.HashValue() != 0)
|
||||
{
|
||||
realToProxyMap->Remove(&mHashKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// I am worried about ordering.
|
||||
// do not remove assignments.
|
||||
mProxyObject = 0;
|
||||
|
@ -168,15 +168,15 @@ public:
|
||||
virtual ~nsProxyObjectManager();
|
||||
|
||||
static nsProxyObjectManager *GetInstance();
|
||||
static PRBool IsManagerShutdown();
|
||||
|
||||
|
||||
PRLock* GetMapLock() const { return mMapLock; }
|
||||
nsHashtable* GetRealObjectToProxyObjectMap() const { return mProxyObjectMap;}
|
||||
nsHashtable* GetIIDToProxyClassMap() const { return mProxyClassMap; }
|
||||
|
||||
|
||||
private:
|
||||
static nsProxyObjectManager* mInstance;
|
||||
PRLock* mMapLock;
|
||||
nsHashtable *mProxyObjectMap;
|
||||
nsHashtable *mProxyClassMap;
|
||||
};
|
||||
|
@ -93,7 +93,6 @@ nsProxyObjectManager::nsProxyObjectManager()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
|
||||
mMapLock = PR_NewLock();
|
||||
mProxyClassMap = new nsHashtable(256, PR_TRUE);
|
||||
mProxyObjectMap = new nsHashtable(256, PR_TRUE);
|
||||
}
|
||||
@ -112,10 +111,17 @@ nsProxyObjectManager::~nsProxyObjectManager()
|
||||
mProxyClassMap->Reset((nsHashtableEnumFunc)PurgeProxyClasses, nsnull);
|
||||
delete mProxyClassMap;
|
||||
}
|
||||
|
||||
delete mProxyObjectMap;
|
||||
nsProxyObjectManager::mInstance = nsnull;
|
||||
|
||||
PR_DestroyLock(mMapLock);
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsProxyObjectManager::IsManagerShutdown()
|
||||
{
|
||||
if (mInstance)
|
||||
return PR_FALSE;
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
nsProxyObjectManager *
|
||||
|
Loading…
Reference in New Issue
Block a user