Issue #2676 - Don't keep AbortController alive for AbortSignal

This commit is contained in:
Moonchild 2025-01-16 16:50:23 +01:00 committed by roytam1
commit 949e3f0ac6
3 changed files with 5 additions and 11 deletions

View file

@ -73,7 +73,7 @@ AbortSignal*
AbortController::Signal()
{
if (!mSignal) {
mSignal = new AbortSignal(this, mAborted);
mSignal = new AbortSignal(mGlobal, mAborted);
}
return mSignal;

View file

@ -4,7 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "AbortSignal.h"
#include "AbortController.h"
#include "mozilla/dom/Event.h"
#include "mozilla/dom/AbortSignalBinding.h"
@ -15,12 +15,10 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(AbortSignal)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(AbortSignal,
DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mController)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(AbortSignal,
DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mController)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(AbortSignal)
@ -29,10 +27,9 @@ NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
NS_IMPL_ADDREF_INHERITED(AbortSignal, DOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(AbortSignal, DOMEventTargetHelper)
AbortSignal::AbortSignal(AbortController* aController,
AbortSignal::AbortSignal(nsIGlobalObject* aGlobalObject,
bool aAborted)
: DOMEventTargetHelper(aController->GetParentObject())
, mController(aController)
: DOMEventTargetHelper(aGlobalObject)
, mAborted(aAborted)
{}

View file

@ -11,7 +11,6 @@
namespace mozilla {
namespace dom {
class AbortController;
class AbortSignal;
class AbortSignal final : public DOMEventTargetHelper
@ -38,7 +37,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AbortSignal, DOMEventTargetHelper)
AbortSignal(AbortController* aController, bool aAborted);
AbortSignal(nsIGlobalObject* aGlobalObject, bool aAborted);
explicit AbortSignal(bool aAborted);
JSObject*
@ -61,8 +60,6 @@ public:
private:
~AbortSignal() = default;
RefPtr<AbortController> mController;
// Raw pointers. Follower unregisters itself in the DTOR.
nsTArray<Follower*> mFollowers;