mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1233774 - fix Leak EventTokenBucket on shutdown r=dragana
This commit is contained in:
parent
a898200615
commit
751c67ab39
@ -111,16 +111,7 @@ EventTokenBucket::~EventTokenBucket()
|
||||
SOCKET_LOG(("EventTokenBucket::dtor %p events=%d\n",
|
||||
this, mEvents.GetSize()));
|
||||
|
||||
if (mTimer && mTimerArmed)
|
||||
mTimer->Cancel();
|
||||
|
||||
#ifdef XP_WIN
|
||||
NormalTimers();
|
||||
if (mFineGrainResetTimerArmed) {
|
||||
mFineGrainResetTimerArmed = false;
|
||||
mFineGrainResetTimer->Cancel();
|
||||
}
|
||||
#endif
|
||||
CleanupTimers();
|
||||
|
||||
// Complete any queued events to prevent hangs
|
||||
while (mEvents.GetSize()) {
|
||||
@ -130,6 +121,25 @@ EventTokenBucket::~EventTokenBucket()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EventTokenBucket::CleanupTimers()
|
||||
{
|
||||
if (mTimer && mTimerArmed) {
|
||||
mTimer->Cancel();
|
||||
}
|
||||
mTimer = nullptr;
|
||||
mTimerArmed = false;
|
||||
|
||||
#ifdef XP_WIN
|
||||
NormalTimers();
|
||||
if (mFineGrainResetTimer && mFineGrainResetTimerArmed) {
|
||||
mFineGrainResetTimer->Cancel();
|
||||
}
|
||||
mFineGrainResetTimer = nullptr;
|
||||
mFineGrainResetTimerArmed = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
EventTokenBucket::SetRate(uint32_t eventsPerSecond,
|
||||
uint32_t burstSize)
|
||||
@ -213,9 +223,13 @@ EventTokenBucket::Stop()
|
||||
MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread);
|
||||
SOCKET_LOG(("EventTokenBucket::Stop %p armed=%d\n", this, mTimerArmed));
|
||||
mStopped = true;
|
||||
if (mTimerArmed) {
|
||||
mTimer->Cancel();
|
||||
mTimerArmed = false;
|
||||
CleanupTimers();
|
||||
|
||||
// Complete any queued events to prevent hangs
|
||||
while (mEvents.GetSize()) {
|
||||
RefPtr<TokenBucketCancelable> cancelable =
|
||||
dont_AddRef(static_cast<TokenBucketCancelable *>(mEvents.PopFront()));
|
||||
cancelable->Fire();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,6 +93,7 @@ public:
|
||||
|
||||
private:
|
||||
virtual ~EventTokenBucket();
|
||||
void CleanupTimers();
|
||||
|
||||
friend class RunNotifyEvent;
|
||||
friend class SetTimerEvent;
|
||||
|
@ -385,9 +385,11 @@ nsHttpHandler::Init()
|
||||
void
|
||||
nsHttpHandler::MakeNewRequestTokenBucket()
|
||||
{
|
||||
if (!mConnMgr)
|
||||
LOG(("nsHttpHandler::MakeNewRequestTokenBucket this=%p child=%d\n",
|
||||
this, IsNeckoChild()));
|
||||
if (!mConnMgr || IsNeckoChild()) {
|
||||
return;
|
||||
|
||||
}
|
||||
RefPtr<EventTokenBucket> tokenBucket =
|
||||
new EventTokenBucket(RequestTokenBucketHz(), RequestTokenBucketBurst());
|
||||
mConnMgr->UpdateRequestTokenBucket(tokenBucket);
|
||||
|
@ -568,8 +568,9 @@ public:
|
||||
nsICancelable **cancel)
|
||||
{
|
||||
MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread);
|
||||
if (!mRequestTokenBucket)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
if (!mRequestTokenBucket) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
return mRequestTokenBucket->SubmitEvent(event, cancel);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user