mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 995405: Don't pass around references to the observer service off the main thread. r=michal
This commit is contained in:
parent
74215b6cbb
commit
d6377e31fc
@ -151,14 +151,18 @@ nsNetMon_AcceptRead(PRFileDesc *listenSock,
|
||||
|
||||
class NotifyNetworkActivity : public nsRunnable {
|
||||
public:
|
||||
NotifyNetworkActivity(nsIObserverService* aObs,
|
||||
NetworkActivityMonitor::Direction aDirection)
|
||||
: mObs(aObs)
|
||||
, mDirection(aDirection)
|
||||
NotifyNetworkActivity(NetworkActivityMonitor::Direction aDirection)
|
||||
: mDirection(aDirection)
|
||||
{}
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
mObs->NotifyObservers(nullptr,
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (!obs)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
obs->NotifyObservers(nullptr,
|
||||
mDirection == NetworkActivityMonitor::kUpload
|
||||
? NS_NETWORK_ACTIVITY_BLIP_UPLOAD_TOPIC
|
||||
: NS_NETWORK_ACTIVITY_BLIP_DOWNLOAD_TOPIC,
|
||||
@ -176,12 +180,15 @@ NetworkActivityMonitor::NetworkActivityMonitor()
|
||||
: mLayerIdentity(PR_INVALID_IO_LAYER)
|
||||
, mBlipInterval(PR_INTERVAL_NO_TIMEOUT)
|
||||
{
|
||||
MOZ_COUNT_CTOR(NetworkActivityMonitor);
|
||||
|
||||
NS_ASSERTION(gInstance==nullptr,
|
||||
"multiple NetworkActivityMonitor instances!");
|
||||
}
|
||||
|
||||
NetworkActivityMonitor::~NetworkActivityMonitor()
|
||||
{
|
||||
MOZ_COUNT_DTOR(NetworkActivityMonitor);
|
||||
gInstance = nullptr;
|
||||
}
|
||||
|
||||
@ -229,10 +236,6 @@ NetworkActivityMonitor::Init_Internal(int32_t blipInterval)
|
||||
mLayerMethods.sendto = nsNetMon_SendTo;
|
||||
mLayerMethods.acceptread = nsNetMon_AcceptRead;
|
||||
|
||||
mObserverService = mozilla::services::GetObserverService();
|
||||
if (!mObserverService)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mBlipInterval = PR_MillisecondsToInterval(blipInterval);
|
||||
// Set the last notification times to time that has just expired, so any
|
||||
// activity even right now will trigger notification.
|
||||
@ -287,7 +290,6 @@ NetworkActivityMonitor::DataInOut(Direction direction)
|
||||
void
|
||||
NetworkActivityMonitor::PostNotification(Direction direction)
|
||||
{
|
||||
nsRefPtr<nsIRunnable> ev = new NotifyNetworkActivity(mObserverService,
|
||||
direction);
|
||||
nsRefPtr<nsIRunnable> ev = new NotifyNetworkActivity(direction);
|
||||
NS_DispatchToMainThread(ev);
|
||||
}
|
||||
|
@ -7,12 +7,9 @@
|
||||
#ifndef NetworkActivityMonitor_h___
|
||||
#define NetworkActivityMonitor_h___
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "prio.h"
|
||||
#include "prinrval.h"
|
||||
|
||||
class nsIObserverService;
|
||||
|
||||
namespace mozilla { namespace net {
|
||||
|
||||
class NetworkActivityMonitor
|
||||
@ -41,7 +38,6 @@ private:
|
||||
PRIOMethods mLayerMethods;
|
||||
PRIntervalTime mBlipInterval;
|
||||
PRIntervalTime mLastNotificationTime[2];
|
||||
nsCOMPtr<nsIObserverService> mObserverService;
|
||||
};
|
||||
|
||||
}} // namespace mozilla::net
|
||||
|
Loading…
Reference in New Issue
Block a user