task: add track_caller to block_in_place
and spawn_local
#5034
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.
Motivation
Most of the public APIs in the
task
module were covered with the#[track_caller]
attribute in #4848. However, two functions were skipped because the call stack
leading to the panic passed through a closure (rust-lang/rust#87417).
The fact that this is missing was brought up again in #5030. At that point, a work around
solution was collectively worked out for that use case, bringing the panic call outside the
closure.
Solution
Functions that may panic can be annotated with
#[track_caller]
so that in the event of a panic, the function where the user called the panicking function is shown instead of the file and line within Tokio source.This change adds
#[track_caller]
to two public APIs in tokio task module which weren"t added in #4848.tokio::task::block_in_place
tokio::task::spawn_local
These APIs had call stacks that went through closures, which is a use case not supported by
#[track_caller]
. These two cases have been refactored so that thepanic!
call is no longer inside a closure.Tests have been added for these two new cases.
Refs: #4413