From 8060f84f617b6089dd68af3e7f03819c1fe3617d 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. (cherry picked from commit 437108ac154de35af0d26f6c66b881da8f8312aa) --- 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 112e797a2d6..aa29fa3fc41 100644 --- a/packages/@ember/-internals/container/lib/container.ts +++ b/packages/@ember/-internals/container/lib/container.ts @@ -480,10 +480,6 @@ export class FactoryManager { this.normalizedName = normalizedName; this.madeToString = undefined; this.injections = undefined; - - if (isInstantiatable(container, fullName)) { - setFactoryFor(factory, this); - } } toString(): string {