Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport two fixes for container #20028

Merged
merged 2 commits into from
Mar 24, 2022
Merged

Conversation

chriskrycho
Copy link
Contributor

@chriskrycho chriskrycho commented Mar 16, 2022

  • [BUGFIX LTS] remove bad setFactoryFor call (0a1b4e4)

    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.

  • [BUGFIX beta] remove unneeded setFactoryFor(this, this) ()

    Identified as part of the work on [BUGFIX LTS] remove bad setFactoryFor call #20025, this particular setFactoryFor was needed at one time but is now defunct. Remove it.

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.
Identified as part of the work on #20025, this particular `setFactoryFor`
was needed at one time but is now defunct. Remove it.
@chriskrycho chriskrycho force-pushed the chriskrycho/container-backports branch from b850ac9 to 2590b2b Compare March 16, 2022 20:32
Copy link
Member

@rwjblue rwjblue left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will wait to merge + release until we have released in 4.2.x, but LGTM 👍 👍 👍

@chadhietala
Copy link
Contributor

LGTM

@rwjblue rwjblue merged commit d3a1957 into release-3-28 Mar 24, 2022
@rwjblue rwjblue deleted the chriskrycho/container-backports branch March 24, 2022 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants