Improve resilience of AbortSignals.

master
Fedor 2020-09-09 17:29:54 +03:00
parent e17e4b71c2
commit 1d7081d1e4
2 changed files with 9 additions and 2 deletions

View File

@ -56,9 +56,16 @@ AbortSignal::Aborted() const
void void
AbortSignal::Abort() AbortSignal::Abort()
{ {
MOZ_ASSERT(!mAborted); // Re-entrancy guard
if (mAborted) {
return;
}
mAborted = true; mAborted = true;
// We might be deleted as a result of aborting a follower, so ensure we
// stay alive until all followers have been aborted.
RefPtr<AbortSignal> pinThis = this;
// Let's inform the followers. // Let's inform the followers.
for (uint32_t i = 0; i < mFollowers.Length(); ++i) { for (uint32_t i = 0; i < mFollowers.Length(); ++i) {
mFollowers[i]->Aborted(); mFollowers[i]->Aborted();

View File

@ -14,7 +14,7 @@ EXPORTS.mozilla.dom += [
'AbortSignal.h', 'AbortSignal.h',
] ]
UNIFIED_SOURCES += [ SOURCES += [
'AbortController.cpp', 'AbortController.cpp',
'AbortSignal.cpp', 'AbortSignal.cpp',
] ]