just because an observer supports weak refs doesn't mean it is one. (found while leak hunting in) bug 166442 r=jag,jst
git-svn-id: svn://10.0.0.236/trunk@129219 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
0f4feec698
commit
945c4237b2
@ -60,16 +60,16 @@ nsObserverList::~nsObserverList(void)
|
||||
nsresult
|
||||
nsObserverList::AddObserver(nsIObserver* anObserver, PRBool ownsWeak)
|
||||
{
|
||||
nsresult rv;
|
||||
PRBool inserted;
|
||||
nsresult rv;
|
||||
PRBool inserted;
|
||||
|
||||
NS_ENSURE_ARG(anObserver);
|
||||
|
||||
nsAutoLock lock(mLock);
|
||||
|
||||
if (!mObserverList) {
|
||||
nsAutoLock lock(mLock);
|
||||
|
||||
if (!mObserverList) {
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(mObserverList));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
#ifdef NS_WEAK_OBSERVERS
|
||||
@ -92,8 +92,8 @@ nsObserverList::AddObserver(nsIObserver* anObserver, PRBool ownsWeak)
|
||||
|
||||
inserted = mObserverList->AppendElement(observerRef);
|
||||
#else
|
||||
if(*anObserver)
|
||||
inserted = mObserverList->AppendElement(*anObserver);
|
||||
if (*anObserver)
|
||||
inserted = mObserverList->AppendElement(*anObserver);
|
||||
#endif
|
||||
return inserted ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
@ -105,23 +105,27 @@ nsObserverList::RemoveObserver(nsIObserver* anObserver)
|
||||
|
||||
NS_ENSURE_ARG(anObserver);
|
||||
|
||||
nsAutoLock lock(mLock);
|
||||
nsAutoLock lock(mLock);
|
||||
|
||||
if (!mObserverList)
|
||||
return NS_ERROR_FAILURE;
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
#ifdef NS_WEAK_OBSERVERS
|
||||
nsCOMPtr<nsISupportsWeakReference> weakRefFactory = do_QueryInterface(anObserver);
|
||||
nsCOMPtr<nsISupports> observerRef;
|
||||
if ( weakRefFactory )
|
||||
if (weakRefFactory) {
|
||||
observerRef = getter_AddRefs(NS_STATIC_CAST(nsISupports*, NS_GetWeakReference(weakRefFactory)));
|
||||
else
|
||||
if (observerRef)
|
||||
removed = mObserverList->RemoveElement(observerRef);
|
||||
if (!removed)
|
||||
observerRef = anObserver;
|
||||
} else
|
||||
observerRef = anObserver;
|
||||
|
||||
if(observerRef)
|
||||
removed = mObserverList->RemoveElement(observerRef);
|
||||
|
||||
if (!removed && observerRef)
|
||||
removed = mObserverList->RemoveElement(observerRef);
|
||||
#else
|
||||
if(*anObserver)
|
||||
if (*anObserver)
|
||||
removed = mObserverList->RemoveElement(*anObserver);
|
||||
#endif
|
||||
return removed ? NS_OK : NS_ERROR_FAILURE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user