зеркало из https://github.com/mozilla/pjs.git
Bug 619096 - nsMemoryReporterManager should be threadsafe. r=vlad a=mfinkle
This commit is contained in:
Родитель
ebc688fea2
Коммит
e2b0475b55
|
@ -39,7 +39,6 @@
|
|||
#include "nsCOMPtr.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsMemoryReporterManager.h"
|
||||
|
||||
#include "nsArrayEnumerator.h"
|
||||
|
||||
/**
|
||||
|
@ -210,7 +209,7 @@ NS_MEMORY_REPORTER_IMPLEMENT(Win32PrivateBytes,
|
|||
** nsMemoryReporterManager implementation
|
||||
**/
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsMemoryReporterManager, nsIMemoryReporterManager)
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS1(nsMemoryReporterManager, nsIMemoryReporterManager)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMemoryReporterManager::Init()
|
||||
|
@ -250,15 +249,28 @@ nsMemoryReporterManager::Init()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsMemoryReporterManager::nsMemoryReporterManager()
|
||||
: mMutex("nsMemoryReporterManager::mMutex")
|
||||
{
|
||||
}
|
||||
|
||||
nsMemoryReporterManager::~nsMemoryReporterManager()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMemoryReporterManager::EnumerateReporters(nsISimpleEnumerator **result)
|
||||
{
|
||||
return NS_NewArrayEnumerator(result, mReporters);
|
||||
nsresult rv;
|
||||
mozilla::MutexAutoLock autoLock(mMutex);
|
||||
rv = NS_NewArrayEnumerator(result, mReporters);
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMemoryReporterManager::RegisterReporter(nsIMemoryReporter *reporter)
|
||||
{
|
||||
mozilla::MutexAutoLock autoLock(mMutex);
|
||||
if (mReporters.IndexOf(reporter) != -1)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
|
@ -269,6 +281,7 @@ nsMemoryReporterManager::RegisterReporter(nsIMemoryReporter *reporter)
|
|||
NS_IMETHODIMP
|
||||
nsMemoryReporterManager::UnregisterReporter(nsIMemoryReporter *reporter)
|
||||
{
|
||||
mozilla::MutexAutoLock autoLock(mMutex);
|
||||
if (!mReporters.RemoveObject(reporter))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
|
||||
#include "nsIMemoryReporter.h"
|
||||
#include "nsCOMArray.h"
|
||||
#include "mozilla/Mutex.h"
|
||||
|
||||
using mozilla::Mutex;
|
||||
|
||||
class nsMemoryReporterManager : public nsIMemoryReporterManager
|
||||
{
|
||||
|
@ -8,8 +11,12 @@ public:
|
|||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIMEMORYREPORTERMANAGER
|
||||
|
||||
nsMemoryReporterManager();
|
||||
virtual ~nsMemoryReporterManager();
|
||||
|
||||
private:
|
||||
nsCOMArray<nsIMemoryReporter> mReporters;
|
||||
Mutex mMutex;
|
||||
};
|
||||
|
||||
#define NS_MEMORY_REPORTER_MANAGER_CID \
|
||||
|
|
Загрузка…
Ссылка в новой задаче