mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-17 14:25:49 +00:00
make the master listener threadsafe
This commit is contained in:
parent
347a7dc1e5
commit
dceb4fc621
xpinstall/src
@ -31,10 +31,13 @@ nsTopProgressListener::nsTopProgressListener()
|
||||
NS_INIT_ISUPPORTS();
|
||||
mListeners = new nsVoidArray();
|
||||
mActive = 0;
|
||||
mLock = PR_NewLock();
|
||||
}
|
||||
|
||||
nsTopProgressListener::~nsTopProgressListener()
|
||||
{
|
||||
if (mLock) PR_Lock(mLock);
|
||||
|
||||
if (mListeners)
|
||||
{
|
||||
PRInt32 i=0;
|
||||
@ -47,26 +50,37 @@ nsTopProgressListener::~nsTopProgressListener()
|
||||
mListeners->Clear();
|
||||
delete (mListeners);
|
||||
}
|
||||
|
||||
if (mLock)
|
||||
{
|
||||
PR_Unlock(mLock);
|
||||
PR_DestroyLock(mLock);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsTopProgressListener, NS_GET_IID(nsIXPIListener));
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS(nsTopProgressListener, NS_GET_IID(nsIXPIListener));
|
||||
|
||||
|
||||
long
|
||||
nsTopProgressListener::RegisterListener(nsIXPIListener * newListener)
|
||||
{
|
||||
if (mLock) PR_Lock(mLock);
|
||||
NS_IF_ADDREF( newListener );
|
||||
return mListeners->AppendElement( newListener );
|
||||
long retval = mListeners->AppendElement( newListener );
|
||||
if (mLock) PR_Unlock(mLock);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
nsTopProgressListener::UnregisterListener(long id)
|
||||
{
|
||||
if (mLock) PR_Lock(mLock);
|
||||
nsIXPIListener *item = (nsIXPIListener*)mListeners->ElementAt(id);
|
||||
NS_IF_RELEASE(item);
|
||||
mListeners->ReplaceElementAt(nsnull, id);
|
||||
NS_IF_RELEASE(item);
|
||||
if (mLock) PR_Unlock(mLock);
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIXPINotifier.h"
|
||||
#include "nsVoidArray.h"
|
||||
|
||||
#include "prlock.h"
|
||||
|
||||
class nsTopProgressListener : public nsIXPIListener
|
||||
{
|
||||
@ -50,8 +50,8 @@ class nsTopProgressListener : public nsIXPIListener
|
||||
|
||||
private:
|
||||
nsVoidArray *mListeners;
|
||||
PRLock *mLock;
|
||||
nsCOMPtr<nsIXPIListener> mActive;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user