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.
  • Loading branch information
chriskrycho committed Mar 16, 2022
1 parent d8f8266 commit 437108a
Showing 1 changed file with 0 additions and 4 deletions.
4 changes: 0 additions & 4 deletions packages/@ember/-internals/container/lib/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -481,10 +481,6 @@ export class FactoryManager<T, C extends FactoryClass | object = FactoryClass> {
this.madeToString = undefined;
this.injections = undefined;
setFactoryFor(this, this);

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

toString(): string {
Expand Down

0 comments on commit 437108a

Please sign in to comment.