Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbab0024e8 | ||
|
|
fc969462ba |
No files matched your search
@@ -702,6 +702,8 @@ EventListenerManager::SetEventHandlerInternal(
|
||||
const TypedEventHandler& aTypedHandler,
|
||||
bool aPermitUntrustedEvents)
|
||||
{
|
||||
auto removeEventHandler = MakeScopeExit([&] { RemoveEventHandler(aName, EmptyString()); });
|
||||
|
||||
MOZ_ASSERT(aName || !aTypeString.IsEmpty());
|
||||
|
||||
EventMessage eventMessage = nsContentUtils::GetEventMessage(aName);
|
||||
@@ -737,6 +739,8 @@ EventListenerManager::SetEventHandlerInternal(
|
||||
}
|
||||
}
|
||||
|
||||
removeEventHandler.release();
|
||||
|
||||
// Set flag to indicate possible need for compilation later
|
||||
listener->mHandlerIsString = !aTypedHandler.HasEventHandler();
|
||||
if (aPermitUntrustedEvents) {
|
||||
@@ -753,8 +757,6 @@ EventListenerManager::SetEventHandler(nsIAtom* aName,
|
||||
bool aPermitUntrustedEvents,
|
||||
Element* aElement)
|
||||
{
|
||||
auto removeEventHandler = MakeScopeExit([&] { RemoveEventHandler(aName, EmptyString()); });
|
||||
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
nsCOMPtr<nsIScriptGlobalObject> global =
|
||||
GetScriptGlobalAndDocument(getter_AddRefs(doc));
|
||||
@@ -829,8 +831,6 @@ EventListenerManager::SetEventHandler(nsIAtom* aName,
|
||||
NS_ENSURE_TRUE(context, NS_ERROR_FAILURE);
|
||||
NS_ENSURE_STATE(global->GetGlobalJSObject());
|
||||
|
||||
removeEventHandler.release();
|
||||
|
||||
Listener* listener = SetEventHandlerInternal(aName,
|
||||
EmptyString(),
|
||||
TypedEventHandler(),
|
||||
|
||||
@@ -623,7 +623,6 @@ TimerThread::AddTimerInternal(nsTimerImpl* aTimer)
|
||||
return insertSlot - mTimers.Elements();
|
||||
}
|
||||
|
||||
// Note: this function must be called from within a lock.
|
||||
bool
|
||||
TimerThread::RemoveTimerInternal(nsTimerImpl* aTimer)
|
||||
{
|
||||
@@ -691,17 +690,12 @@ TimerThread::PostTimerEvent(already_AddRefed<nsTimerImpl> aTimerRef)
|
||||
// at the TimerThread we'll deadlock.
|
||||
MonitorAutoUnlock unlock(mMonitor);
|
||||
rv = target->Dispatch(event, NS_DISPATCH_NORMAL);
|
||||
if (NS_FAILED(rv)) {
|
||||
timer = event->ForgetTimer();
|
||||
// We do this to avoid possible deadlock by taking the two locks in a
|
||||
// different order than is used in RemoveTimer(). RemoveTimer() has
|
||||
// aTimer->mMutex first. We use timer.get() to keep static analysis
|
||||
// happy.
|
||||
MutexAutoLock lock1(timer.get()->mMutex);
|
||||
MonitorAutoLock lock2(mMonitor);
|
||||
RemoveTimerInternal(timer.get());
|
||||
return timer.forget();
|
||||
}
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
timer = event->ForgetTimer();
|
||||
RemoveTimerInternal(timer);
|
||||
return timer.forget();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
||||
@@ -69,10 +69,6 @@ private:
|
||||
already_AddRefed<nsTimerImpl> PostTimerEvent(already_AddRefed<nsTimerImpl> aTimerRef);
|
||||
|
||||
nsCOMPtr<nsIThread> mThread;
|
||||
// Lock ordering requirements:
|
||||
// (optional) ThreadWrapper::sMutex ->
|
||||
// (optional) nsTimerImpl::mMutex ->
|
||||
// TimerThread::mMonitor
|
||||
Monitor mMonitor;
|
||||
|
||||
bool mShutdown;
|
||||
|
||||
@@ -441,8 +441,6 @@ nsTimerImpl::Fire(int32_t aGeneration)
|
||||
// Don't fire callbacks or fiddle with refcounts when the mutex is locked.
|
||||
// If some other thread Cancels/Inits after this, they're just too late.
|
||||
if (aGeneration != mGeneration) {
|
||||
// This timer got rescheduled or cancelled before we fired, so ignore this
|
||||
// firing
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -166,10 +166,7 @@ public:
|
||||
int32_t mGeneration;
|
||||
|
||||
uint32_t mDelay;
|
||||
// Never updated while in the TimerThread's timer list. Only updated
|
||||
// before adding to that list or during nsTimerImpl::Fire(), when it has
|
||||
// been removed from the TimerThread's list. TimerThread can safely access
|
||||
// mTimeout of any timer in the list.
|
||||
// Updated only after this timer has been removed from the timer thread.
|
||||
TimeStamp mTimeout;
|
||||
|
||||
#ifdef MOZ_TASK_TRACER
|
||||
|
||||
Reference in new issue
Block a user