From aea9c312ce6334eb6d4990c9d3503d67e46dabbe Mon Sep 17 00:00:00 2001 From: Chris Krycho Date: Wed, 16 Mar 2022 12:26:03 -0600 Subject: [PATCH] [BUGFIX LTS] remove bad `setFactoryFor` call This call *attempted* to avoid setting the `INIT_FACTORY` on items which did not need it (specifically, it avoided setting it on things which were not instantiable), but ultimately failed to do. It was ultimately setting the new `FactoryManager` instance as the `INIT_FACTORY` value on each instantiable object, which includes classes and not just class instances, since objects are only treated as non-instantiable when they explicitly specify `instantiate: false`. The net was a memory leak: the routing service *class* ended up with an `INIT_FACTORY` pointing to a `FactoryManager` instance which in turn always had a `container` on it, which meant that there was a cycle (the container also referenced the service) and thus a leak. This affects both tests and FastBoot, where we construct new instances of the service whenever we call the `visit` API. --- packages/@ember/-internals/container/lib/container.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/@ember/-internals/container/lib/container.ts b/packages/@ember/-internals/container/lib/container.ts index 4bd3bd1aea8..07652bbeadf 100644 --- a/packages/@ember/-internals/container/lib/container.ts +++ b/packages/@ember/-internals/container/lib/container.ts @@ -559,10 +559,6 @@ class FactoryManager { this.madeToString = undefined; this.injections = undefined; setFactoryFor(this, this); - - if (isInstantiatable(container, fullName) && (HAS_NATIVE_SYMBOL || INIT_FACTORY in factory)) { - setFactoryFor(factory, this); - } } toString(): string {