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 possible fd leak with threaded runtime #28

Merged
merged 4 commits into from
Feb 28, 2020
Merged

Conversation

LucioFranco
Copy link
Member

This PR introduces a fix where creating many runtimes in a loop will
cause an fd leak. This is because storing a strong arc within each
on_thread_start fn will cause the runtime handle to not be deallocated
when the compat::Runtime is dropped. To avoid this we only store a
weak pointer within the on_thread_start fn and attempt to upgrade it
to get the handle. Since, on_thread_start is generally always called
while the tokio runtime is not dropped the upgrade should not fail. This
then allows us to drop the runtime and deallocate the handle by storing
the only long lived strong arc within compat::Runtime.

I've verified this fixes our repro and doesn't leak fds on our
benchmarks where we orignally discovered this issue.

Closes #27

Signed-off-by: Lucio Franco luciofranco14@gmail.com

This PR introduces a fix where creating many runtimes in a loop will
cause an fd leak. This is because storing a strong arc within each
`on_thread_start` fn will cause the runtime handle to not be deallocated
when the `compat::Runtime` is dropped. To avoid this we only store a
weak pointer within the `on_thread_start` fn and attempt to upgrade it
to get the handle. Since, `on_thread_start` is generally always called
while the tokio runtime is not dropped the upgrade should not fail. This
then allows us to drop the runtime and deallocate the handle by storing
the only long lived strong arc within `compat::Runtime`.

I've verified this fixes our repro and doesn't leak fds on our
benchmarks where we orignally discovered this issue.

Closes #27

Signed-off-by: Lucio Franco <luciofranco14@gmail.com>
Copy link
Member

@hawkw hawkw left a comment

Choose a reason for hiding this comment

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

the change looks good to me. I commented on a few minor nits, including some proof-reading of the comments added in this PR. besides that, the fix seems correct. thanks for figuring this out!

LucioFranco and others added 3 commits February 28, 2020 16:25
Co-Authored-By: Eliza Weisman <eliza@buoyant.io>
Co-Authored-By: Eliza Weisman <eliza@buoyant.io>
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.

File descriptors leak
2 participants