Repository: rust
Issue: Generated drop_in_place tries to reserve 1.8MB on stack
Labels: T-compiler,C-bug,S-needs-repro

<!--
Thank you for filing a bug report! 🐛 Please provide a short summary of the bug,
along with any information you feel relevant to replicating the bug.
-->
Hey! We recently ran into a stack overflow crash in an async context when building our program in debug mode. The crashing stack frame is a `drop_in_place` function.
The stack trace (aarch64) looks like this (annotated with stack and frame pointer):


```
frame #0: sp=0x0000000171185fa0 fp=0x0000000171341eb0 pc=0x000000010058b1b0 epoxide`core::ptr::drop_in_place<<epoxide::graphql::mutation::Mutation as async_graphql::resolver_utils::container::ContainerType>::resolve_field::{{closure}}> + 24 at mod.rs:498
frame #1: sp=0x0000000171341ec0 fp=0x0000000171341ee0 pc=0x00000001051e9bcc epoxide`core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<async_graphql_value::ConstValue>,async_graphql::error::ServerError>+core::marker::Send>>((null)=0x0000000144a076c0) + 44 at mod.rs:498
frame #2: sp=0x0000000171341ef0 fp=0x0000000171341f00 pc=0x00000001051eb170 epoxide`core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<async_graphql_value::ConstValue>,async_graphql::error::ServerError>+core::marker::Send>>>((null)=0x0000000144a076c0) + 24 at mod.rs:498
frame #3: sp=0x0000000171341f10 fp=0x0000000171343410 pc=0x0000000100f03730 epoxide`async_graphql::resolver_utils::container::Fields::add_set::{{closure}}((null)=0x0000000171389518) + 3332 at container.rs:212
```

The generated asm looks like this:
```asm
000000010058b198 <core::ptr::drop_in_place$LT$$LT$epoxide..graphql..mutation..Mutation$u20$as$u20$async_graphql..resolver_utils..container..ContainerType$GT$..resolve_field..$u7b$$u7b$closure$u7d$$u7d$$GT$::h920c4fd5bde2d731>:
; core::ptr::drop_in_place$LT$$LT$epoxide..graphql..mutation..Mutation$u20$as$u20$async_graphql..resolver_utils..container..ContainerType$GT$..resolve_field..$u7b$$u7b$closure$u7d$$u7d$$GT$::h920c4fd5bde2d731():
10058b198:      stp     x28, x27, [sp, #-32]!
10058b19c:      stp     x29, x30, [sp, #16]
10058b1a0:      add     x29, sp, #16
10058b1a4:      sub     sp, sp, #443, lsl #12   ; =1814528
10058b1a8:      sub     sp, sp, #3840
10058b1ac:      sub     x9, x29, #40
10058b1b0:      str     x9, [sp, #8]
10058b1b4:      str     x0, [sp, #16]
10058b1b8:      mov     x8, x0
10058b1bc:      str     x8, [x9]
10058b1c0:      ldrb    w8, [x0, #16]
10058b1c4:      subs    w8, w8, #0
10058b1c8:      mov     w8, w8
10058b1cc:      str     x8, [sp, #24]
10058b1d0:      subs    x8, x8, #202
10058b1d4:      cset    w8, hi
10058b1d8:      tbnz    w8, #0, 0x10058b1f8 <core::ptr::drop_in_place$LT$$LT$epoxide..graphql..mutation..Mutation$u20$as$u20$async_graphql..resolver_utils..container..ContainerType$GT$..resolve_field..$u7b$$u7b$closure$u7d$$u7d$$GT$::h920c4fd5bde2d731+0x60>
10058b1dc:      ldr     x11, [sp, #24]
10058b1e0:      adrp    x10, 0x105de5000 <core::ptr::drop_in_place$LT$async_graphql..resolver_utils..container..resolve_container_inner$LT$epoxide..graphql..site..mutations..MovePressFeatureError$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$::heeaf608ffbd66660+0xf4>
10058b1e4:      add     x10, x10, #3256
10058b1e8:      adr     x8, #0
10058b1ec:      ldrsw   x9, [x10, x11, lsl  #2]
10058b1f0:      add     x8, x8, x9
10058b1f4:      br      x8
10058b1f8:      add     sp, sp, #443, lsl #12   ; =1814528
10058b1fc:      add     sp, sp, #3840
10058b200:      ldp     x29, x30, [sp, #16]
10058b204:      ldp     x28, x27, [sp], #32
10058b208:      ret
```

Based on the [stack and frame pointer](https://codalogic.com/blog/2022/10/20/Aarch64-Stack-Frames-Again) we have the following stack sizes for the latest frames:
```
Frame #0 1.82 MB
Frame #1 32.00 B
Frame #2 16.00 B
Frame #3 5.38 KB
Frame #4 80.00 B
Frame #5 2.27 KB
Frame #6 656.00 B
Frame #7 3.70 KB
Frame #8 1.34 KB
Frame #9 64.00 B
Frame #10 80.00 B
Frame #11 1.57 KB
Frame #12 864.00 B
Frame #13 6.54 KB
Frame #14 64.00 B
Frame #15 80.00 B
Frame #16 1.54 KB
Frame #17 800.00 B
Frame #18 4.27 KB
```

I expected to see this happen: Based on the tracking issue for drop_in_place, it should not try to move things onto the stack.

Instead, this happened: drop_in_place tries to move the stack pointer by 1.8M addresses. Which causes a stack overflow, as the default tokio stack size is 2MB.

This might be related to `async_graphql` generating a >1.5k lines function with >100 `if` branches, each with a capturing async closure. -Ztype-sizes suggests the type for the parent async closure is 10KB large, which does not account for the 1.8MB we see here.

We tried to create a minimum reproducible case based on one of the `async_grapql` examples, but the sheer number of branches doesn't seem to be the single cause here. 
Changing other parts in our program or using a nightly version removes the stack overflow, so we are not really sure what causes rustc to create a `drop_in_place` function that tries to reserve 1.8MB on the stack.
We hope there is a way to figure out what is going on without a minimum case. We can provide objdump and llvm IR snippets if necessary.

### Meta
<!--
If you're using the stable version of the compiler, you should also check if the
bug also exists in the beta or nightly versions.
-->

`rustc --version --verbose`:
```
rustc 1.75.0 (82e1608df 2023-12-21)
binary: rustc
commit-hash: 82e1608dfa6e0b5569232559e3d385fea5a93112
commit-date: 2023-12-21
host: aarch64-apple-darwin
release: 1.75.0
LLVM version: 17.0.6
```

<!--
Include a backtrace in the code block by setting `RUST_BACKTRACE=1` in your
environment. E.g. `RUST_BACKTRACE=1 cargo build`.
-->
<details><summary>Backtrace</summary>
<p>

```
* thread #13, name = 'tokio-runtime-worker', stop reason = EXC_BAD_ACCESS (code=2, address=0x171185fa8)
  * frame #0: sp=0x0000000171185fa0 fp=0x0000000171341eb0 pc=0x000000010058b1b0 epoxide`core::ptr::drop_in_place<<epoxide::graphql::mutation::Mutation as async_graphql::resolver_utils::container::ContainerType>::resolve_field::{{closure}}> + 24 at mod.rs:498
    frame #1: sp=0x0000000171341ec0 fp=0x0000000171341ee0 pc=0x00000001051e9bcc epoxide`core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<async_graphql_value::ConstValue>,async_graphql::error::ServerError>+core::marker::Send>>((null)=0x0000000144a076c0) + 44 at mod.rs:498
    frame #2: sp=0x0000000171341ef0 fp=0x0000000171341f00 pc=0x00000001051eb170 epoxide`core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<async_graphql_value::ConstValue>,async_graphql::error::ServerError>+core::marker::Send>>>((null)=0x0000000144a076c0) + 24 at mod.rs:498
    frame #3: sp=0x0000000171341f10 fp=0x0000000171343410 pc=0x0000000100f03730 epoxide`async_graphql::resolver_utils::container::Fields::add_set::{{closure}}((null)=0x0000000171389518) + 3332 at container.rs:212
    frame #4: sp=0x0000000171343420 fp=0x0000000171343470 pc=0x00000001052f1310 epoxide`<core::pin::Pin<P> as core::future::future::Future>::poll(self=core::pin::Pin<&mut core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=core::result::Result<(async_graphql_value::Name, async_graphql_value::ConstValue), async_graphql::error::ServerError>> + core::marker::Send), alloc::alloc::Global>>> @ 0x0000000171343438, cx=0x0000000171389518) + 92 at future.rs:125
    frame #5: sp=0x0000000171343480 fp=0x0000000171343d60 pc=0x0000000100c57150 epoxide`async_graphql::resolver_utils::container::resolve_container_inner::{{closure}}((null)=0x0000000171389518) + 1284 at container.rs:166
    frame #6: sp=0x0000000171343d70 fp=0x0000000171344000 pc=0x0000000100cd66f8 epoxide`async_graphql::resolver_utils::container::resolve_container_serial::{{closure}}((null)=0x0000000171389518) + 384 at container.rs:116
    frame #7: sp=0x0000000171344010 fp=0x0000000171344e80 pc=0x00000001025155cc epoxide`async_graphql::schema::Schema<Query,Mutation,Subscription>::execute_once::{{closure}}((null)=0x0000000171389518) + 1496 at schema.rs:456
    frame #8: sp=0x0000000171344e90 fp=0x00000001713453d0 pc=0x00000001025185a8 epoxide`async_graphql::schema::Schema<Query,Mutation,Subscription>::execute::{{closure}}::{{closure}}::{{closure}}((null)=0x0000000171389518) + 392 at schema.rs:498
    frame #9: sp=0x00000001713453e0 fp=0x0000000171345420 pc=0x00000001033516e4 epoxide`<core::pin::Pin<P> as core::future::future::Future>::poll(self=core::pin::Pin<&mut core::pin::Pin<&mut async_graphql::schema::{impl#4}::execute::{async_fn#0}::{async_block#0}::{async_block_env#0}<epoxide::graphql::query::Query, epoxide::graphql::mutation::Mutation, async_graphql::types::empty_subscription::EmptySubscription, async_graphql::request::Request>>> @ 0x00000001713453f8, cx=0x0000000171389518) + 68 at future.rs:125
    frame #10: sp=0x0000000171345430 fp=0x0000000171345480 pc=0x00000001052780c0 epoxide`<&mut F as core::future::future::Future>::poll(self=core::pin::Pin<&mut &mut (dyn core::future::future::Future<Output=async_graphql::response::Response> + core::marker::Send + core::marker::Unpin)> @ 0x0000000171345430, cx=0x0000000171389518) + 96 at future.rs:113
    frame #11: sp=0x0000000171345490 fp=0x0000000171345ab0 pc=0x000000010517e028 epoxide`async_graphql::extensions::NextExecute::run::{{closure}}((null)=0x0000000171389518) + 900 at mod.rs:289
    frame #12: sp=0x0000000171345ac0 fp=0x0000000171345e20 pc=0x0000000101628ce8 epoxide`async_graphql::extensions::Extensions::execute::{{closure}}((null)=0x0000000171389518) + 512 at mod.rs:499
    frame #13: sp=0x0000000171345e30 fp=0x00000001713477c0 pc=0x00000001025179ac epoxide`async_graphql::schema::Schema<Query,Mutation,Subscription>::execute::{{closure}}::{{closure}}((null)=0x0000000171389518) + 2188 at schema.rs:504
    frame #14: sp=0x00000001713477d0 fp=0x0000000171347810 pc=0x00000001033514f4 epoxide`<core::pin::Pin<P> as core::future::future::Future>::poll(self=core::pin::Pin<&mut core::pin::Pin<&mut async_graphql::schema::{impl#4}::execute::{async_fn#0}::{async_block_env#0}<epoxide::graphql::query::Query, epoxide::graphql::mutation::Mutation, async_graphql::types::empty_subscription::EmptySubscription, async_graphql::request::Request>>> @ 0x00000001713477e8, cx=0x0000000171389518) + 68 at future.rs:125
    frame #15: sp=0x0000000171347820 fp=0x0000000171347870 pc=0x00000001052780c0 epoxide`<&mut F as core::future::future::Future>::poll(self=core::pin::Pin<&mut &mut (dyn core::future::future::Future<Output=async_graphql::response::Response> + core::marker::Send + core::marker::Unpin)> @ 0x0000000171347820, cx=0x0000000171389518) + 96 at future.rs:113
    frame #16: sp=0x0000000171347880 fp=0x0000000171347e80 pc=0x000000010517cf78 epoxide`async_graphql::extensions::NextRequest::run::{{closure}}((null)=0x0000000171389518) + 864 at mod.rs:165
    frame #17: sp=0x0000000171347e90 fp=0x00000001713481b0 pc=0x0000000101628f74 epoxide`async_graphql::extensions::Extensions::request::{{closure}}((null)=0x0000000171389518) + 476 at mod.rs:449
    frame #18: sp=0x00000001713481c0 fp=0x0000000171349270 pc=0x0000000102516ff0 epoxide`async_graphql::schema::Schema<Query,Mutation,Subscription>::execute::{{closure}}((null)=0x0000000171389518) + 800 at schema.rs:511
    frame #19: sp=0x0000000171349280 fp=0x000000017134ba10 pc=0x00000001029e74a8 epoxide`epoxide::graphql::execute::{{closure}}::{{closure}}((null)=0x0000000171389518) + 2208 at mod.rs:219
    frame #20: sp=0x000000017134ba20 fp=0x000000017134bb60 pc=0x00000001001c9d74 epoxide`<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll(self=core::pin::Pin<&mut tracing::instrument::Instrumented<epoxide::graphql::execute::{async_fn#0}::{async_block_env#0}>> @ 0x000000017134ba60, cx=0x0000000171389518) + 556 at instrument.rs:321
    frame #21: sp=0x000000017134bb70 fp=0x0000000171352090 pc=0x00000001029e698c epoxide`epoxide::graphql::execute::{{closure}}((null)=0x0000000171389518) + 3248 at mod.rs:166
    frame #22: sp=0x00000001713520a0 fp=0x0000000171357fe0 pc=0x0000000102f95034 epoxide`epoxide::graphql::handle::call::{{closure}}((null)=0x0000000171389518) + 2884 at mod.rs:149
    frame #23: sp=0x0000000171357ff0 fp=0x000000017135af20 pc=0x0000000102f94444 epoxide`epoxide::graphql::handle::handler::{{closure}}((null)=0x0000000171389518) + 1680 at mod.rs:91
    frame #24: sp=0x000000017135af30 fp=0x000000017135dfa0 pc=0x00000001016d0fa0 epoxide`epoxide::graphql::dispatch::handler::{{closure}}((null)=0x0000000171389518) + 1628 at mod.rs:77
    frame #25: sp=0x000000017135dfb0 fp=0x0000000171374600 pc=0x00000001011a3d28 epoxide`<epoxide::App as mendes::application::Application>::handle::{{closure}}::{{closure}}((null)=0x0000000171389518) + 8556 at lib.rs:360
    frame #26: sp=0x0000000171374610 fp=0x0000000171374750 pc=0x00000001001bfeb4 epoxide`<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll(self=core::pin::Pin<&mut tracing::instrument::Instrumented<epoxide::{impl#13}::handle::{async_block#0}::{async_block_env#0}>> @ 0x0000000171374650, cx=0x0000000171389518) + 556 at instrument.rs:321
    frame #27: sp=0x0000000171374760 fp=0x0000000171381460 pc=0x00000001011a1970 epoxide`<epoxide::App as mendes::application::Application>::handle::{{closure}}((null)=0x0000000171389518) + 5116 at lib.rs:327
    frame #28: sp=0x0000000171381470 fp=0x00000001713814c0 pc=0x00000001000e814c epoxide`<core::pin::Pin<P> as core::future::future::Future>::poll(self=core::pin::Pin<&mut core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>> @ 0x0000000171381488, cx=0x0000000171389518) + 92 at future.rs:125
    frame #29: sp=0x00000001713814d0 fp=0x0000000171381500 pc=0x000000010002dd4c epoxide`<core::panic::unwind_safe::AssertUnwindSafe<F> as core::future::future::Future>::poll(self=core::pin::Pin<&mut core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>> @ 0x00000001713814e8, cx=0x0000000171389518) + 56 at unwind_safe.rs:297
    frame #30: sp=0x0000000171381510 fp=0x0000000171381520 pc=0x000000010009da00 epoxide`<futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll::{{closure}} + 36 at catch_unwind.rs:36
    frame #31: sp=0x0000000171381530 fp=0x0000000171381550 pc=0x000000010002e000 epoxide`<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once(self=core::panic::unwind_safe::AssertUnwindSafe<futures_util::future::future::catch_unwind::{impl#1}::poll::{closure_env#0}<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>> @ 0x0000000171381540, (null)=()) + 32 at unwind_safe.rs:272
    frame #32: sp=0x0000000171381560 fp=0x0000000171381700 pc=0x00000001000dabb4 epoxide`std::panicking::try::do_call(data=0x0000000171381750) + 84 at panicking.rs:552
    frame #33: sp=0x0000000171381710 fp=0x0000000171381720 pc=0x00000001000ddc40 epoxide`__rust_try + 32
    frame #34: sp=0x0000000171381730 fp=0x0000000171381980 pc=0x00000001000d9e44 epoxide`std::panicking::try(f=core::panic::unwind_safe::AssertUnwindSafe<futures_util::future::future::catch_unwind::{impl#1}::poll::{closure_env#0}<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>> @ 0x0000000171381940) + 92 at panicking.rs:516
    frame #35: sp=0x0000000171381990 fp=0x00000001713819a0 pc=0x00000001000e9388 epoxide`std::panic::catch_unwind(f=core::panic::unwind_safe::AssertUnwindSafe<futures_util::future::future::catch_unwind::{impl#1}::poll::{closure_env#0}<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>> @ 0x0000000171381990) + 32 at panic.rs:142
    frame #36: sp=0x00000001713819b0 fp=0x0000000171381c10 pc=0x000000010009d950 epoxide`<futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll(self=core::pin::Pin<&mut futures_util::future::future::catch_unwind::CatchUnwind<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>> @ 0x0000000171381be0, cx=0x0000000171389518) + 100 at catch_unwind.rs:36
    frame #37: sp=0x0000000171381c20 fp=0x0000000171382010 pc=0x000000010002fee4 epoxide`<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll(self=core::pin::Pin<&mut futures_util::future::future::map::Map<futures_util::future::future::catch_unwind::CatchUnwind<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>, fn(core::result::Result<http::response::Response<hyper::body::body::Body>, alloc::boxed::Box<(dyn core::any::Any + core::marker::Send), alloc::alloc::Global>>) -> core::result::Result<http::response::Response<hyper::body::body::Body>, core::convert::Infallible>>> @ 0x0000000171381c60, cx=0x0000000171389518) + 148 at map.rs:55
    frame #38: sp=0x0000000171382020 fp=0x0000000171382040 pc=0x00000001000b6c48 epoxide`<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll(self=core::pin::Pin<&mut futures_util::future::future::Map<futures_util::future::future::catch_unwind::CatchUnwind<core::panic::unwind_safe::AssertUnwindSafe<core::pin::Pin<alloc::boxed::Box<(dyn core::future::future::Future<Output=http::response::Response<hyper::body::body::Body>> + core::marker::Send), alloc::alloc::Global>>>>, fn(core::result::Result<http::response::Response<hyper::body::body::Body>, alloc::boxed::Box<(dyn core::any::Any + core::marker::Send), alloc::alloc::Global>>) -> core::result::Result<http::response::Response<hyper::body::body::Body>, core::convert::Infallible>>> @ 0x0000000171382030, cx=0x0000000171389518) + 48 at lib.rs:91
    frame #39: sp=0x0000000171382050 fp=0x0000000171382a80 pc=0x0000000100032df8 epoxide`<hyper::proto::h1::dispatch::Server<S,hyper::body::body::Body> as hyper::proto::h1::dispatch::Dispatch>::poll_msg(self=core::pin::Pin<&mut hyper::proto::h1::dispatch::Server<mendes::hyper::ConnectionService<epoxide::App>, hyper::body::body::Body>> @ 0x0000000171382128, cx=0x0000000171389518) + 228 at dispatch.rs:502
    frame #40: sp=0x0000000171382a90 fp=0x0000000171384660 pc=0x0000000100034da4 epoxide`hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_write(self=0x000000011c80f0a0, cx=0x0000000171389518) + 284 at dispatch.rs:303
    frame #41: sp=0x0000000171384670 fp=0x0000000171384c50 pc=0x000000010003a728 epoxide`hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_loop(self=0x000000011c80f0a0, cx=0x0000000171389518) + 1936 at dispatch.rs:164
    frame #42: sp=0x0000000171384c60 fp=0x0000000171384dd0 pc=0x00000001000348dc epoxide`hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_inner(self=0x000000011c80f0a0, cx=0x0000000171389518, should_shutdown=true) + 92 at dispatch.rs:140
    frame #43: sp=0x0000000171384de0 fp=0x0000000171384e40 pc=0x0000000100033aa8 epoxide`hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_catch(self=0x000000011c80f0a0, cx=0x0000000171389518, should_shutdown=true) + 56 at dispatch.rs:119
    frame #44: sp=0x0000000171384e50 fp=0x0000000171384e70 pc=0x00000001000321c8 epoxide`<hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T> as core::future::future::Future>::poll(self=core::pin::Pin<&mut hyper::proto::h1::dispatch::Dispatcher<hyper::proto::h1::dispatch::Server<mendes::hyper::ConnectionService<epoxide::App>, hyper::body::body::Body>, hyper::body::body::Body, hyper::server::tcp::addr_stream::AddrStream, hyper::proto::h1::role::Server>> @ 0x0000000171384e60, cx=0x0000000171389518) + 60 at dispatch.rs:435
    frame #45: sp=0x0000000171384e80 fp=0x0000000171384ec0 pc=0x000000010004cd90 epoxide`<hyper::server::conn::ProtoServer<T,B,S,E> as core::future::future::Future>::poll(self=core::pin::Pin<&mut hyper::server::conn::ProtoServer<hyper::server::tcp::addr_stream::AddrStream, hyper::body::body::Body, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec>> @ 0x0000000171384ea0, cx=0x0000000171389518) + 84 at conn.rs:989
    frame #46: sp=0x0000000171384ed0 fp=0x0000000171385a00 pc=0x00000001000613a4 epoxide`<hyper::server::conn::upgrades::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll(self=core::pin::Pin<&mut hyper::server::conn::upgrades::UpgradeableConnection<hyper::server::tcp::addr_stream::AddrStream, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec>> @ 0x0000000171384f28, cx=0x0000000171389518) + 116 at conn.rs:1049
    frame #47: sp=0x0000000171385a10 fp=0x0000000171385b10 pc=0x000000010009bec8 epoxide`<hyper::common::drain::Watching<F,FN> as core::future::future::Future>::poll(self=core::pin::Pin<&mut hyper::common::drain::Watching<hyper::server::conn::upgrades::UpgradeableConnection<hyper::server::tcp::addr_stream::AddrStream, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec>, fn(core::pin::Pin<&mut hyper::server::conn::upgrades::UpgradeableConnection<hyper::server::tcp::addr_stream::AddrStream, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec>>)>> @ 0x0000000171385ab0, cx=0x0000000171389518) + 452 at drain.rs:96
    frame #48: sp=0x0000000171385b20 fp=0x0000000171389420 pc=0x00000001000bb4dc epoxide`<hyper::server::server::new_svc::NewSvcTask<I,N,S,E,W> as core::future::future::Future>::poll(self=core::pin::Pin<&mut hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>> @ 0x0000000171388bb8, cx=0x0000000171389518) + 316 at server.rs:777
    frame #49: sp=0x0000000171389430 fp=0x00000001713894e0 pc=0x000000010008293c epoxide`tokio::runtime::task::core::Core<T,S>::poll::{{closure}}(ptr=0x000000011c80f030) + 152 at core.rs:328
    frame #50: sp=0x00000001713894f0 fp=0x0000000171389590 pc=0x00000001000818bc epoxide`tokio::runtime::task::core::Core<T,S>::poll [inlined] tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut(self=0x000000011c80f030, f=tokio::runtime::task::core::{impl#6}::poll::{closure_env#0}<hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>, alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>> @ 0x0000000171389568) + 36 at unsafe_cell.rs:16
    frame #51: sp=0x00000001713894f0 fp=0x0000000171389590 pc=0x0000000100081898 epoxide`tokio::runtime::task::core::Core<T,S>::poll(self=0x000000011c80f020, cx=core::task::wake::Context @ 0x0000000171389518) + 68 at core.rs:317
    frame #52: sp=0x00000001713895a0 fp=0x00000001713895e0 pc=0x000000010003eb9c epoxide`tokio::runtime::task::harness::poll_future::{{closure}} + 52 at harness.rs:485
    frame #53: sp=0x00000001713895f0 fp=0x0000000171389610 pc=0x000000010002ddb0 epoxide`<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once(self=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>, alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>>> @ 0x0000000171389600, (null)=()) + 32 at unwind_safe.rs:272
    frame #54: sp=0x0000000171389620 fp=0x0000000171389670 pc=0x00000001000db864 epoxide`std::panicking::try::do_call(data=0x00000001713896b0) + 72 at panicking.rs:552
    frame #55: sp=0x0000000171389680 fp=0x0000000171389690 pc=0x00000001000ddc40 epoxide`__rust_try + 32
    frame #56: sp=0x00000001713896a0 fp=0x0000000171389700 pc=0x00000001000d82b8 epoxide`std::panicking::try(f=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>, alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>>> @ 0x00000001713896d0) + 88 at panicking.rs:516
    frame #57: sp=0x0000000171389710 fp=0x0000000171389720 pc=0x00000001000e975c epoxide`std::panic::catch_unwind(f=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>, alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>>> @ 0x0000000171389710) + 32 at panic.rs:142
    frame #58: sp=0x0000000171389730 fp=0x0000000171389870 pc=0x000000010003e12c epoxide`tokio::runtime::task::harness::poll_future(core=0x000000011c80f020, cx=core::task::wake::Context @ 0x0000000171389830) + 84 at harness.rs:473
    frame #59: sp=0x0000000171389880 fp=0x00000001713898d0 pc=0x00000001000404ac epoxide`tokio::runtime::task::harness::Harness<T,S>::poll_inner(self=0x00000001713898f8) + 152 at harness.rs:208
    frame #60: sp=0x00000001713898e0 fp=0x0000000171389910 pc=0x000000010004247c epoxide`tokio::runtime::task::harness::Harness<T,S>::poll(self=tokio::runtime::task::harness::Harness<hyper::server::server::new_svc::NewSvcTask<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<core::result::Result<mendes::hyper::ConnectionService<epoxide::App>, hyper::error::Error>>, mendes::hyper::ConnectionService<epoxide::App>, hyper::common::exec::Exec, hyper::server::shutdown::GracefulWatcher>, alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>> @ 0x00000001713898f8) + 28 at harness.rs:153
    frame #61: sp=0x0000000171389920 fp=0x0000000171389930 pc=0x00000001000afcdc epoxide`tokio::runtime::task::raw::poll(ptr=core::ptr::non_null::NonNull<tokio::runtime::task::core::Header> @ 0x0000000171389920) + 36 at raw.rs:271
    frame #62: sp=0x0000000171389940 fp=0x0000000171389950 pc=0x0000000105b175d4 epoxide`tokio::runtime::task::raw::RawTask::poll(self=tokio::runtime::task::raw::RawTask @ 0x0000000171389940) + 52 at raw.rs:201
    frame #63: sp=0x0000000171389960 fp=0x0000000171389980 pc=0x0000000105b6caa8 epoxide`tokio::runtime::task::LocalNotified<S>::run(self=tokio::runtime::task::LocalNotified<alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>> @ 0x0000000171389970) + 44 at mod.rs:416
    frame #64: sp=0x0000000171389990 fp=0x0000000171389ad0 pc=0x0000000105b653b8 epoxide`tokio::runtime::scheduler::multi_thread::worker::Context::run_task::{{closure}} + 52 at worker.rs:576
    frame #65: sp=0x0000000171389ae0 fp=0x0000000171389c40 pc=0x0000000105b6529c epoxide`tokio::runtime::scheduler::multi_thread::worker::Context::run_task + 120 at coop.rs:107
    frame #66: sp=0x0000000171389ae0 fp=0x0000000171389c40 pc=0x0000000105b65224 epoxide`tokio::runtime::scheduler::multi_thread::worker::Context::run_task [inlined] tokio::runtime::coop::budget(f=tokio::runtime::scheduler::multi_thread::worker::{impl#1}::run_task::{closure_env#0} @ 0x0000000171389bc8) + 92 at coop.rs:73
    frame #67: sp=0x0000000171389ae0 fp=0x0000000171389c40 pc=0x0000000105b651c8 epoxide`tokio::runtime::scheduler::multi_thread::worker::Context::run_task(self=0x000000017138a050, task=tokio::runtime::task::Notified<alloc::sync::Arc<tokio::runtime::scheduler::multi_thread::handle::Handle, alloc::alloc::Global>> @ 0x0000000171389b68, core=0x0000000144809e40) + 536 at worker.rs:575
    frame #68: sp=0x0000000171389c50 fp=0x0000000171389df0 pc=0x0000000105b64ba8 epoxide`tokio::runtime::scheduler::multi_thread::worker::Context::run(self=0x000000017138a050, core=0x0000000144809e40) + 540 at worker.rs:526
    frame #69: sp=0x0000000171389e00 fp=0x0000000171389e50 pc=0x0000000105b648d0 epoxide`tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}::{{closure}} + 104 at worker.rs:491
    frame #70: sp=0x0000000171389e60 fp=0x0000000171389ed0 pc=0x0000000105b831ac epoxide`tokio::runtime::context::scoped::Scoped<T>::set(self=0x000000014501d638, t=0x000000017138a048, f=tokio::runtime::scheduler::multi_thread::worker::run::{closure#0}::{closure_env#0} @ 0x0000000171389e80) + 148 at scoped.rs:40
    frame #71: sp=0x0000000171389ee0 fp=0x0000000171389ef0 pc=0x0000000105b4436c epoxide`tokio::runtime::context::set_scheduler::{{closure}}(c=0x000000014501d600) + 40 at context.rs:176
    frame #72: sp=0x0000000171389f00 fp=0x0000000171389fa0 pc=0x0000000105b5acbc epoxide`std::thread::local::LocalKey<T>::try_with(self=0x000000010875aa80, f=tokio::runtime::context::set_scheduler::{closure_env#0}<(), tokio::runtime::scheduler::multi_thread::worker::run::{closure#0}::{closure_env#0}> @ 0x0000000171389fd0) + 316 at local.rs:270
    frame #73: sp=0x0000000171389fb0 fp=0x0000000171389fc0 pc=0x0000000105b59148 epoxide`std::thread::local::LocalKey<T>::with(self=0x000000010875aa80, f=<unavailable>) + 24 at local.rs:246
    frame #74: sp=0x0000000171389fd0 fp=0x000000017138a000 pc=0x0000000105b442b0 epoxide`tokio::runtime::context::set_scheduler(v=0x000000017138a048, f=tokio::runtime::scheduler::multi_thread::worker::run::{closure#0}::{closure_env#0} @ 0x0000000171389ff0) + 68 at context.rs:176
    frame #75: sp=0x000000017138a010 fp=0x000000017138a140 pc=0x0000000105b647f4 epoxide`tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}((null)=0x000000017138a1d0) + 280 at worker.rs:486
    frame #76: sp=0x000000017138a150 fp=0x000000017138a230 pc=0x0000000105b23d98 epoxide`tokio::runtime::context::runtime::enter_runtime(handle=0x000000017138a290, allow_block_in_place=true, f=tokio::runtime::scheduler::multi_thread::worker::run::{closure_env#0} @ 0x000000017138a170) + 236 at runtime.rs:65
    frame #77: sp=0x000000017138a240 fp=0x000000017138a2d0 pc=0x0000000105b6462c epoxide`tokio::runtime::scheduler::multi_thread::worker::run(worker=(refs:1) {...}) + 368 at worker.rs:478
    frame #78: sp=0x000000017138a2e0 fp=0x000000017138a2f0 pc=0x0000000105b644b0 epoxide`tokio::runtime::scheduler::multi_thread::worker::Launch::launch::{{closure}} + 24 at worker.rs:447
    frame #79: sp=0x000000017138a300 fp=0x000000017138a340 pc=0x0000000105b1add0 epoxide`<tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll(self=core::pin::Pin<&mut tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>> @ 0x000000017138a300,_cx=0x000000017138a438) + 136 at task.rs:42
    frame #80: sp=0x000000017138a350 fp=0x000000017138a400 pc=0x0000000105b0dcb4 epoxide`tokio::runtime::task::core::Core<T,S>::poll::{{closure}}(ptr=0x00000001449047a8) + 152 at core.rs:328

    frame #81: sp=0x000000017138a410 fp=0x000000017138a4b0 pc=0x0000000105b0db78 epoxide`tokio::runtime::task::core::Core<T,S>::poll [inlined] tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut(self=0x00000001449047a8, f=tokio::runtime::task::core::{impl#6}::poll::{closure_env#0}<tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>, tokio::runtime::blocking::schedule::BlockingSchedule> @ 0x000000017138a488) + 36 at unsafe_cell.rs:16
    frame #82: sp=0x000000017138a410 fp=0x000000017138a4b0 pc=0x0000000105b0db54 epoxide`tokio::runtime::task::core::Core<T,S>::poll(self=0x00000001449047a0, cx=core::task::wake::Context @ 0x000000017138a438) + 68 at core.rs:317
    frame #83: sp=0x000000017138a4c0 fp=0x000000017138a500 pc=0x0000000105b2749c epoxide`tokio::runtime::task::harness::poll_future::{{closure}} + 52 at harness.rs:485
    frame #84: sp=0x000000017138a510 fp=0x000000017138a530 pc=0x0000000105b453c0 epoxide`<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once(self=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>, tokio::runtime::blocking::schedule::BlockingSchedule>> @ 0x000000017138a520, (null)=()) + 32 at unwind_safe.rs:272
    frame #85: sp=0x000000017138a540 fp=0x000000017138a590 pc=0x0000000105b56dd4 epoxide`std::panicking::try::do_call(data=0x000000017138a5d0) + 72 at panicking.rs:552
    frame #86: sp=0x000000017138a5a0 fp=0x000000017138a5b0 pc=0x0000000105b58d78 epoxide`__rust_try + 32
    frame #87: sp=0x000000017138a5c0 fp=0x000000017138a620 pc=0x0000000105b560d4 epoxide`std::panicking::try(f=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>, tokio::runtime::blocking::schedule::BlockingSchedule>> @ 0x000000017138a5f0) + 88 at panicking.rs:516
    frame #88: sp=0x000000017138a630 fp=0x000000017138a640 pc=0x0000000105b323cc epoxide`std::panic::catch_unwind(f=core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::{closure_env#0}<tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>, tokio::runtime::blocking::schedule::BlockingSchedule>> @ 0x000000017138a630) + 32 at panic.rs:142
    frame #89: sp=0x000000017138a650 fp=0x000000017138a790 pc=0x0000000105b26e64 epoxide`tokio::runtime::task::harness::poll_future(core=0x00000001449047a0, cx=core::task::wake::Context @ 0x000000017138a750) + 84 at harness.rs:473
    frame #90: sp=0x000000017138a7a0 fp=0x000000017138a7f0 pc=0x0000000105b24a8c epoxide`tokio::runtime::task::harness::Harness<T,S>::poll_inner(self=0x000000017138a818) + 152 at harness.rs:208
    frame #91: sp=0x000000017138a800 fp=0x000000017138a830 pc=0x0000000105b248c0 epoxide`tokio::runtime::task::harness::Harness<T,S>::poll(self=tokio::runtime::task::harness::Harness<tokio::runtime::blocking::task::BlockingTask<tokio::runtime::scheduler::multi_thread::worker::{impl#0}::launch::{closure_env#0}>, tokio::runtime::blocking::schedule::BlockingSchedule> @ 0x000000017138a818) + 28 at harness.rs:153
    frame #92: sp=0x000000017138a840 fp=0x000000017138a850 pc=0x0000000105b17934 epoxide`tokio::runtime::task::raw::poll(ptr=core::ptr::non_null::NonNull<tokio::runtime::task::core::Header> @ 0x000000017138a840) + 36 at raw.rs:271
    frame #93: sp=0x000000017138a860 fp=0x000000017138a870 pc=0x0000000105b175d4 epoxide`tokio::runtime::task::raw::RawTask::poll(self=tokio::runtime::task::raw::RawTask @ 0x000000017138a860) + 52 at raw.rs:201
    frame #94: sp=0x000000017138a880 fp=0x000000017138a8c0 pc=0x0000000105b6cb6c epoxide`tokio::runtime::task::UnownedTask<S>::run(self=tokio::runtime::task::UnownedTask<tokio::runtime::blocking::schedule::BlockingSchedule> @ 0x000000017138a8a0) + 64 at mod.rs:453
    frame #95: sp=0x000000017138a8d0 fp=0x000000017138a8e0 pc=0x0000000105b6cfcc epoxide`tokio::runtime::blocking::pool::Task::run(self=tokio::runtime::blocking::pool::Task @ 0x000000017138a8d0) + 32 at pool.rs:159
    frame #96: sp=0x000000017138a8f0 fp=0x000000017138ab70 pc=0x0000000105b6f458 epoxide`tokio::runtime::blocking::pool::Inner::run(self=0x0000000144809660, worker_thread_id=9) + 436 at pool.rs:513
    frame #97: sp=0x000000017138ab80 fp=0x000000017138abd0 pc=0x0000000105b6f20c epoxide`tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}} + 144 at pool.rs:471
    frame #98: sp=0x000000017138abe0 fp=0x000000017138abf0 pc=0x0000000105b321ac epoxide`std::sys_common::backtrace::__rust_begin_short_backtrace(f=<unavailable>) + 16 at backtrace.rs:154
    frame #99: sp=0x000000017138ac00 fp=0x000000017138ac20 pc=0x0000000105b11e08 epoxide`std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}} + 40 at mod.rs:529
    frame #100: sp=0x000000017138ac30 fp=0x000000017138ac60 pc=0x0000000105b45190 epoxide`<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once(self=<unavailable>, (null)=()) + 40 at unwind_safe.rs:272
    frame #101: sp=0x000000017138ac70 fp=0x000000017138acc0 pc=0x0000000105b57490 epoxide`std::panicking::try::do_call(data=0x000000017138ad00) + 72 at panicking.rs:552
    frame #102: sp=0x000000017138acd0 fp=0x000000017138ace0 pc=0x0000000105b58d78 epoxide`__rust_try + 32
    frame #103: sp=0x000000017138acf0 fp=0x000000017138ad70 pc=0x0000000105b56624 epoxide`std::panicking::try(f=<unavailable>) + 76 at panicking.rs:516
    frame #104: sp=0x000000017138ad80 fp=0x000000017138af50 pc=0x0000000105b11c8c epoxide`std::thread::Builder::spawn_unchecked_::{{closure}} + 4 at panic.rs:142
    frame #105: sp=0x000000017138ad80 fp=0x000000017138af50 pc=0x0000000105b11c88 epoxide`std::thread::Builder::spawn_unchecked_::{{closure}} + 412 at mod.rs:528
    frame #106: sp=0x000000017138af60 fp=0x000000017138af70 pc=0x0000000105b796e4 epoxide`core::ops::function::FnOnce::call_once{{vtable.shim}}((null)=0x0000000144904aa0, (null)=()) + 24 at function.rs:250
    frame #107: sp=0x000000017138af80 fp=0x000000017138afc0 pc=0x0000000105d1f970 epoxide`std::sys::unix::thread::Thread::new::thread_start [inlined] <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once + 12 at boxed.rs:2007 [opt]
    frame #108: sp=0x000000017138af80 fp=0x000000017138afc0 pc=0x0000000105d1f964 epoxide`std::sys::unix::thread::Thread::new::thread_start [inlined] <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once + 4 at boxed.rs:2007 [opt]
    frame #109: sp=0x000000017138af80 fp=0x000000017138afc0 pc=0x0000000105d1f960 epoxide`std::sys::unix::thread::Thread::new::thread_start + 32 at thread.rs:108 [opt]
    frame #110: sp=0x000000017138afd0 fp=0x000000017138afe0 pc=0x00000001871de034 libsystem_pthread.dylib`_pthread_start + 136

```

</p>
</details>