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

fix memory leak in the async_local_storage scope manager #1134

Merged
merged 1 commit into from Oct 23, 2020

Conversation

@rochdev
Copy link
Member

@rochdev rochdev commented Oct 23, 2020

What does this PR do?

Fix memory leak in the async_local_storage scope manager.

Motivation

There is a bug in AsyncLocalStorage where enterWith may be called while in the callback of exit, causing the storage instance to be re-added to the internal storage list. This slows down the application continuously until it's no longer able to respond to requests. A fix will need to be done in Node, but in the meantime we can simply remove our call to exit since it was just an optimization that is unnecessary.

Fixes #1133

@rochdev rochdev added this to the 0.28.0 milestone Oct 23, 2020
@rochdev rochdev requested a review from DataDog/apm-js as a code owner Oct 23, 2020
@bengl
bengl approved these changes Oct 23, 2020
@rochdev rochdev merged commit 7a7c504 into master Oct 23, 2020
58 of 59 checks passed
58 of 59 checks passed
dd-gitlab/copy_to_s3
Details
ci/circleci: browser Your tests passed on CircleCI!
Details
ci/circleci: browserstack Your tests passed on CircleCI!
Details
ci/circleci: lint Your tests passed on CircleCI!
Details
ci/circleci: node-amqp10 Your tests passed on CircleCI!
Details
ci/circleci: node-amqplib Your tests passed on CircleCI!
Details
ci/circleci: node-bench-e2e-latest Your tests passed on CircleCI!
Details
ci/circleci: node-bench-latest Your tests passed on CircleCI!
Details
ci/circleci: node-bench-profiler-latest Your tests passed on CircleCI!
Details
ci/circleci: node-bluebird Your tests passed on CircleCI!
Details
ci/circleci: node-bunyan Your tests passed on CircleCI!
Details
ci/circleci: node-cassandra Your tests passed on CircleCI!
Details
ci/circleci: node-connect Your tests passed on CircleCI!
Details
ci/circleci: node-core-10 Your tests passed on CircleCI!
Details
ci/circleci: node-core-12 Your tests passed on CircleCI!
Details
ci/circleci: node-core-14 Your tests passed on CircleCI!
Details
ci/circleci: node-core-15 Your tests passed on CircleCI!
Details
ci/circleci: node-core-8 Your tests passed on CircleCI!
Details
ci/circleci: node-core-latest Your tests passed on CircleCI!
Details
ci/circleci: node-core-windows Your tests passed on CircleCI!
Details
ci/circleci: node-couchbase Your tests passed on CircleCI!
Details
ci/circleci: node-dns Your tests passed on CircleCI!
Details
ci/circleci: node-elasticsearch Your tests passed on CircleCI!
Details
ci/circleci: node-express Your tests passed on CircleCI!
Details
ci/circleci: node-fastify Your tests passed on CircleCI!
Details
ci/circleci: node-fs-10 Your tests passed on CircleCI!
Details
ci/circleci: node-fs-12 Your tests passed on CircleCI!
Details
ci/circleci: node-fs-14 Your tests passed on CircleCI!
Details
ci/circleci: node-fs-15 Your tests passed on CircleCI!
Details
ci/circleci: node-fs-8 Your tests passed on CircleCI!
Details
ci/circleci: node-fs-latest Your tests passed on CircleCI!
Details
ci/circleci: node-generic-pool Your tests passed on CircleCI!
Details
ci/circleci: node-google-cloud-pubsub Your tests passed on CircleCI!
Details
ci/circleci: node-graphql Your tests passed on CircleCI!
Details
ci/circleci: node-grpc Your tests passed on CircleCI!
Details
ci/circleci: node-hapi Your tests passed on CircleCI!
Details
ci/circleci: node-http Your tests passed on CircleCI!
Details
ci/circleci: node-http2 Your tests passed on CircleCI!
Details
ci/circleci: node-knex Your tests passed on CircleCI!
Details
ci/circleci: node-koa Your tests passed on CircleCI!
Details
ci/circleci: node-memcached Your tests passed on CircleCI!
Details
ci/circleci: node-microgateway-core Your tests passed on CircleCI!
Details
ci/circleci: node-mongodb-core Your tests passed on CircleCI!
Details
ci/circleci: node-mongoose Your tests passed on CircleCI!
Details
ci/circleci: node-mysql Your tests passed on CircleCI!
Details
ci/circleci: node-net Your tests passed on CircleCI!
Details
ci/circleci: node-paperplane Your tests passed on CircleCI!
Details
ci/circleci: node-pino Your tests passed on CircleCI!
Details
ci/circleci: node-postgres Your tests passed on CircleCI!
Details
ci/circleci: node-promise Your tests passed on CircleCI!
Details
ci/circleci: node-promise-js Your tests passed on CircleCI!
Details
ci/circleci: node-q Your tests passed on CircleCI!
Details
ci/circleci: node-redis Your tests passed on CircleCI!
Details
ci/circleci: node-restify Your tests passed on CircleCI!
Details
ci/circleci: node-router Your tests passed on CircleCI!
Details
ci/circleci: node-tedious Your tests passed on CircleCI!
Details
ci/circleci: node-when Your tests passed on CircleCI!
Details
ci/circleci: node-winston Your tests passed on CircleCI!
Details
ci/circleci: typescript Your tests passed on CircleCI!
Details
@rochdev rochdev deleted the fix-async-local-storage-exit-leak branch Oct 23, 2020
@rochdev
Copy link
Member Author

@rochdev rochdev commented Oct 23, 2020

Fix in Node: nodejs/node#35779

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

2 participants
You can’t perform that action at this time.