Compare commits

...
Author SHA1 Message Date
Moonchild cbab0024e8 [DOM events] Re-apply clear event listener.
This was lost somewhere. commit 0fad293135
2023-08-04 20:25:30 +02:00
Moonchild fc969462ba Revert XPCOM timer cleanup 2023-08-04 20:23:38 +02:00
5 changed files with 11 additions and 26 deletions

No files matched your search

+4 -4
View File
@@ -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(),
+6 -12
View File
@@ -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;
-4
View File
@@ -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;
-2
View File
@@ -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;
}
+1 -4
View File
@@ -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