diff options
| author | bors <bors@rust-lang.org> | 2020-04-16 09:13:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-04-16 09:13:07 +0000 |
| commit | 4e4d49d60fd696c4036d438292673a2d7fd34519 (patch) | |
| tree | 2c98f15cf059ad04e929920f0a4a0c72cc23fe9d /src/libcore | |
| parent | 534a41a32952d36ec73656357777ebbea707aeb4 (diff) | |
| parent | 3ba3bd5dc91560e42f62b6a8ea0d42fe2ee473d0 (diff) | |
| download | rust-4e4d49d60fd696c4036d438292673a2d7fd34519.tar.gz rust-4e4d49d60fd696c4036d438292673a2d7fd34519.zip | |
Auto merge of #70831 - sfackler:shrink-future-stack, r=matthewjasper
Remove a stack frame from .await calls
The stack frames when `.await`ing one async fn from another currently look like this:
```
12: foo::b::{{closure}}
at src/main.rs:2
13: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
at /home/sfackler/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/future/mod.rs:66
14: core::future::poll_with_context
at /home/sfackler/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/future/mod.rs:84
15: foo::a::{{closure}}
at src/main.rs:6
```
Since the move away from using TLS to pass the Context around, it's now easy to remove frame 14 by removing poll_with_context in favor of calling Future::poll directly. This still leaves the `GenFuture` frame, but that seems significantly harder to deal with.
It also improves diagnostics a bit since they no longer talk about the private poll_with_context function.
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/future/mod.rs | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/libcore/future/mod.rs b/src/libcore/future/mod.rs index 8dfda7a4a32..a6b769147d0 100644 --- a/src/libcore/future/mod.rs +++ b/src/libcore/future/mod.rs @@ -77,9 +77,6 @@ where #[unstable(feature = "gen_future", issue = "50547")] #[cfg(not(bootstrap))] #[inline] -pub unsafe fn poll_with_context<F>(f: Pin<&mut F>, mut cx: ResumeTy) -> Poll<F::Output> -where - F: Future, -{ - F::poll(f, cx.0.as_mut()) +pub unsafe fn get_context<'a, 'b>(cx: ResumeTy) -> &'a mut Context<'b> { + &mut *cx.0.as_ptr().cast() } |
