Skip to content

Commit

Permalink
[BUGFIX LTS] remove bad setFactoryFor call
Browse files Browse the repository at this point in the history
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 437108a)
  • Loading branch information
chriskrycho authored and kategengler committed Mar 21, 2022
1 parent df1cc2b commit 8060f84
Showing 1 changed file with 0 additions and 4 deletions.
4 changes: 0 additions & 4 deletions packages/@ember/-internals/container/lib/container.ts
Expand Up @@ -480,10 +480,6 @@ export class FactoryManager<T, C> {
this.normalizedName = normalizedName;
this.madeToString = undefined;
this.injections = undefined;

if (isInstantiatable(container, fullName)) {
setFactoryFor(factory, this);
}
}

toString(): string {
Expand Down

0 comments on commit 8060f84

Please sign in to comment.