fix: don't create static variables containing a tokio::runtime::Handle #38
+29
−44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The Bug
There was a bug in the approach implemented in #30.
The issue could manifest as a panic with message:
"A Tokio 1.x context was found, but it is being shutdown."
This would occur in the following scenario:
.compat()
was used within a tokio context other than the fallback runtime..compat()
was used again.The root cause being that we had a
Handle
stored in astatic
global.Handle
s are weak by design, and cannot prevent the runtime from shutting down.The Fix
I reverted most of the changes in #30 and instead added a
get_runtime_handle
function. This function attempts to acquire an existing runtime handle withtry_current
before creating a fallback runtime. This should be safe becausetry_current
will only succeed within the scope of a tokio runtime context, and it cannot outlive that scope.