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

[0.7] Dropped SendWrapper panic #2907

Open
osmano807 opened this issue Sep 2, 2024 · 4 comments
Open

[0.7] Dropped SendWrapper panic #2907

osmano807 opened this issue Sep 2, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@osmano807
Copy link

osmano807 commented Sep 2, 2024

Describe the bug
The application panics with the error message: "Dropped SendWrapper variable from a thread different to the one it has been created with."
When accessing the following code I get a panic in the server. The reproduction is finicky, managed to generate a minimal reproduction copying my project structure. Some changes stops reproducing the panic, like removing the nested <Suspense>.

Leptos Dependencies

leptos = { version = "0.7.0-beta", features = ["nightly"] }
leptos_axum = { version = "0.7.0-beta", optional = true }
leptos_meta = { version = "0.7.0-beta" }
leptos_router = { version = "0.7.0-beta", features = ["nightly"] }

To Reproduce
Steps to reproduce the behavior:

  1. Use the start-axum-0.7 template
  2. Switch the app.rs to use the following components:
use leptos::prelude::*;
use leptos_meta::{provide_meta_context, MetaTags};
use leptos_router::{components::*, hooks::use_params, params::Params, path, MatchNestedRoutes};

//use leptos::logging::*;

pub fn shell(options: LeptosOptions) -> impl IntoView {
    view! {
        <!DOCTYPE html>
        <html lang="en">
            <head>
                <meta charset="utf-8" />
                <meta name="viewport" content="width=device-width, initial-scale=1" />
                <AutoReload options=options.clone() />
                <HydrationScripts options />
                <MetaTags />
            </head>
            <body>
                <App />
            </body>
        </html>
    }
}

#[component]
pub fn App() -> impl IntoView {
    provide_meta_context();

    view! {
        <Router>
            <Routes fallback=|| {
                view! {}
            }>
                <Route path=path!("") view=Hello />
                <ItemCollectionRoutes />
            </Routes>
        </Router>
    }
}

#[component]
fn Hello() -> impl IntoView {
    view! { <h1>Hello</h1> }
}

#[component]
pub fn ListItems() -> impl IntoView {
    view! {
        <Header />
        <ItemTable />
    }
}

#[component]
fn Header() -> impl IntoView {
    let user_id = query_user_id();

    view! { <Suspense>{move || {}}</Suspense> }
}

#[component]
fn ItemTable() -> impl IntoView {
    let user_id = query_user_id();

    view! { <Suspense>{move || {}}</Suspense> }
}

pub fn query_user_id() -> Memo<Result<String, String>> {
    let params = use_params::<UserParams>();

    Memo::new(move |_| params.get().map(|p| p.user_id).map_err(|e| e.to_string()))
}

#[derive(Params, PartialEq, Clone)]
struct UserParams {
    user_id: String,
}

#[component]
fn ItemCollectionRoutes() -> impl MatchNestedRoutes<Dom> + Clone {
    view! {
        <ParentRoute path=path!("") view=DrawerItemCollection>
            <Route path=path!("/a/:user_id/b") view=ListItems />
        </ParentRoute>
    }
    .into_inner()
}

#[component]
pub fn DrawerItemCollection() -> impl IntoView {
    view! { <DrawerGeneric sidebar=SidebarItemCollection /> }
}

#[component]
fn SidebarItemCollection() -> impl IntoView {
    let user_id = query_user_id();

    view! {
        <Suspense>
            <Suspense>
                <A href="/new" attr:class="link link-primary">
                    New Item
                </A>
            </Suspense>
        </Suspense>
    }
}

#[component]
fn DrawerGeneric(sidebar: impl IntoView) -> impl IntoView {
    view! {
        <div>
            <Outlet />
        </div>
        <div>{sidebar}</div>
    }
}
  1. Run the application and navigate to the route "/a/{some_id}/b" with multiple concurrent clients:
❯ bombardier 'http://localhost:8000/a/4tby3jdw/b'
Bombarding http://localhost:8000/a/4tby3jdw/b for 10s using 125 connection(s)
[=====================================================================] 10s
Done!
Statistics        Avg      Stdev        Max
  Reqs/sec      2309.86     713.81    9768.23
  Latency       54.53ms    11.72ms   181.33ms
  HTTP codes:
    1xx - 0, 2xx - 22986, 3xx - 0, 4xx - 0, 5xx - 0
    others - 1
  Errors:
    the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection - 1
  Throughput:    10.82MB/s
  1. Observe the application crash with the mentioned error.

Expected behavior
The application should render the components for the given route without crashing.

Error Message

thread 'tokio-runtime-worker' panicked at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1:
Dropped SendWrapper<T> variable from a thread different to the one it has been created with.
**Error Log with Backtrace**
thread 'tokio-runtime-worker' panicked at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1:
Dropped SendWrapper<T> variable from a thread different to the one it has been created with.
stack backtrace:
   0: rust_begin_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:662:5
   1: core::panicking::panic_fmt
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:74:14
   2: core::panicking::panic_display
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:264:5
   3: send_wrapper::invalid_drop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/send_wrapper-0.6.0/src/lib.rs:291:3
   4: <send_wrapper::SendWrapper<T> as core::ops::drop::Drop>::drop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/send_wrapper-0.6.0/src/lib.rs:230:4
   5: core::ptr::drop_in_place<send_wrapper::SendWrapper<core::option::Option<wasm_bindgen::JsValue>>>
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1
   6: core::ptr::drop_in_place<core::option::Option<send_wrapper::SendWrapper<core::option::Option<wasm_bindgen::JsValue>>>>
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1
   7: <tachys::html::property::Property<K,P,R> as tachys::html::attribute::Attribute<R>>::dry_resolve
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/html/property.rs:121:26
   8: <(A,B,C,D,E,F) as tachys::html::attribute::Attribute<Rndr>>::dry_resolve
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/html/attribute/mod.rs:332:19
   9: <tachys::html::element::HtmlElement<E,At,Ch,Rndr> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/html/element/mod.rs:253:9
  10: <leptos::into_view::View<T> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/leptos-0.7.0-beta4/src/into_view.rs:93:9
  11: <leptos::into_view::View<T> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/leptos-0.7.0-beta4/src/into_view.rs:93:9
  12: <leptos::suspense_component::SuspenseBoundary<_,Fal,Chil> as tachys::view::RenderHtml<Rndr>>::to_html_async_with_buf
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/leptos-0.7.0-beta4/src/suspense_component.rs:299:9
  13: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/reactive_graph/owned.rs:144:13
  14: reactive_graph::owner::Owner::with
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reactive_graph-0.1.0-beta4/src/owner.rs:190:19
  15: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/reactive_graph/owned.rs:143:9
  16: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/reactive_graph/owned.rs:144:13
  17: reactive_graph::owner::Owner::with
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reactive_graph-0.1.0-beta4/src/owner.rs:190:19
  18: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/reactive_graph/owned.rs:143:9
  19: tachys::ssr::StreamBuilder::push_async_out_of_order::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/ssr/mod.rs:191:21
  20: <tachys::ssr::StreamBuilder as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/ssr/mod.rs:327:31
  21: <tachys::ssr::StreamBuilder as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tachys-0.1.0-beta4/src/ssr/mod.rs:383:33
  22: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:50:40
  23: <core::pin::Pin<P> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:120:9
  24: <futures_util::stream::stream::fuse::Fuse<S> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/fuse.rs:53:27
  25: <futures_util::stream::stream::ready_chunks::ReadyChunks<St> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/ready_chunks.rs:40:19
  26: <futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/map.rs:58:26
  27: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:56:9
  28: <core::pin::Pin<P> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:120:9
  29: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:56:9
  30: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:50:40
  31: <reactive_graph::owner::arena::sandboxed::Sandboxed<T> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/reactive_graph-0.1.0-beta4/src/owner/arena.rs:170:23
  32: <futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/map.rs:58:26
  33: <S as futures_core::stream::TryStream>::try_poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:196:9
  34: <axum_core::body::StreamBody<S> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-core-0.4.3/src/body.rs:205:36
  35: <http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/http-body-util-0.1.2/src/combinators/map_err.rs:62:15
  36: <http_body_util::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/http-body-util-0.1.2/src/combinators/box_body.rs:103:9
  37: <axum_core::body::Body as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-core-0.4.3/src/body.rs:122:9
  38: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_write
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:373:39
  39: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_loop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:173:21
  40: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:149:16
  41: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_catch
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:128:28
  42: <hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:471:9
  43: <hyper::server::conn::http1::UpgradeableConnection<I,S> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/server/conn/http1.rs:511:26
  44: <hyper_util::server::conn::auto::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-util-0.1.7/src/server/conn/auto.rs:593:28
  45: <axum::serve::Serve<M,S> as core::future::into_future::IntoFuture>::into_future::{{closure}}::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-0.7.5/src/serve.rs:218:26
  46: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:331:17
  47: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/loom/std/unsafe_cell.rs:16:9
  48: tokio::runtime::task::core::Core<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:320:13
  49: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:500:19
  50: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panic/unwind_safe.rs:272:9
  51: std::panicking::try::do_call
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:554:40
  52: __rust_try
  53: std::panicking::try
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:518:19
  54: std::panic::catch_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panic.rs:345:14
  55: tokio::runtime::task::harness::poll_future
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:488:18
  56: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:209:27
  57: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:154:15
  58: tokio::runtime::task::raw::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:271:5
  59: tokio::runtime::task::raw::RawTask::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:201:18
  60: tokio::runtime::task::LocalNotified<S>::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/mod.rs:436:9
  61: tokio::runtime::scheduler::multi_thread::worker::Context::run_task::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:661:17
  62: tokio::runtime::coop::with_budget
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/coop.rs:107:5
  63: tokio::runtime::coop::budget
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/coop.rs:73:5
  64: tokio::runtime::scheduler::multi_thread::worker::Context::run_task
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:597:9
  65: tokio::runtime::scheduler::multi_thread::worker::Context::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:560:24
  66: tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:513:21
  67: tokio::runtime::context::scoped::Scoped<T>::set
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context/scoped.rs:40:9
  68: tokio::runtime::context::set_scheduler::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context.rs:180:26
  69: std::thread::local::LocalKey<T>::try_with
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/thread/local.rs:283:12
  70: std::thread::local::LocalKey<T>::with
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/thread/local.rs:260:9
  71: tokio::runtime::context::set_scheduler
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context.rs:180:9
  72: tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:508:9
  73: tokio::runtime::context::runtime::enter_runtime
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context/runtime.rs:65:16
  74: tokio::runtime::scheduler::multi_thread::worker::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:500:5
  75: tokio::runtime::scheduler::multi_thread::worker::Launch::launch::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:466:45
  76: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/task.rs:42:21
  77: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:331:17
  78: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/loom/std/unsafe_cell.rs:16:9
  79: tokio::runtime::task::core::Core<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:320:13
  80: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:500:19
  81: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panic/unwind_safe.rs:272:9
  82: std::panicking::try::do_call
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:554:40
  83: __rust_try
  84: std::panicking::try
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:518:19
  85: std::panic::catch_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panic.rs:345:14
  86: tokio::runtime::task::harness::poll_future
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:488:18
  87: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:209:27
  88: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:154:15
  89: tokio::runtime::task::raw::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:271:5
  90: tokio::runtime::task::raw::RawTask::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:201:18
  91: tokio::runtime::task::UnownedTask<S>::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/mod.rs:473:9
  92: tokio::runtime::blocking::pool::Task::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:160:9
  93: tokio::runtime::blocking::pool::Inner::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:518:17
  94: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:476:13
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
@gbj
Copy link
Collaborator

gbj commented Sep 2, 2024

Thanks, the repro is great here! Could you do me a favor and test #2911 against your non-minimal example? I think it should fix the issue but not entirely sure.

@osmano807
Copy link
Author

Don't think so, tested in my project and with the reproduction, still panics.

Leptos Dependencies

leptos = { git = "https://github.com/leptos-rs/leptos.git", features = [
  "nightly",
], rev = "refs/pull/2911/head" }
leptos_meta = { git = "https://github.com/leptos-rs/leptos.git", rev = "refs/pull/2911/head" }
leptos_router = { git = "https://github.com/leptos-rs/leptos.git", features = [
  "nightly",
], rev = "refs/pull/2911/head" }
leptos_axum = { git = "https://github.com/leptos-rs/leptos.git", rev = "refs/pull/2911/head" }

Panic

thread 'tokio-runtime-worker' panicked at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1:
Dropped SendWrapper<T> variable from a thread different to the one it has been created with.
Backtrace
stack backtrace:
   0: rust_begin_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:662:5
   1: core::panicking::panic_fmt
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:74:14
   2: core::panicking::panic_display
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:264:5
   3: send_wrapper::invalid_drop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/send_wrapper-0.6.0/src/lib.rs:291:3
   4: <send_wrapper::SendWrapper<T> as core::ops::drop::Drop>::drop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/send_wrapper-0.6.0/src/lib.rs:230:4
   5: core::ptr::drop_in_place<send_wrapper::SendWrapper<core::option::Option<wasm_bindgen::JsValue>>>
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1
   6: core::ptr::drop_in_place<core::option::Option<send_wrapper::SendWrapper<core::option::Option<wasm_bindgen::JsValue>>>>
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ptr/mod.rs:574:1
   7: <tachys::html::property::Property<K,P,R> as tachys::html::attribute::Attribute<R>>::dry_resolve
             at /home/opc/Documents/leptos/tachys/src/html/property.rs:121:26
   8: <(A,B,C,D,E,F) as tachys::html::attribute::Attribute<Rndr>>::dry_resolve
             at /home/opc/Documents/leptos/tachys/src/html/attribute/mod.rs:332:19
   9: <tachys::html::element::HtmlElement<E,At,Ch,Rndr> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/Documents/leptos/tachys/src/html/element/mod.rs:253:9
  10: <leptos::into_view::View<T> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/Documents/leptos/leptos/src/into_view.rs:93:9
  11: <leptos::into_view::View<T> as tachys::view::RenderHtml<Rndr>>::dry_resolve
             at /home/opc/Documents/leptos/leptos/src/into_view.rs:93:9
  12: <leptos::suspense_component::SuspenseBoundary<_,Fal,Chil> as tachys::view::RenderHtml<Rndr>>::to_html_async_with_buf
             at /home/opc/Documents/leptos/leptos/src/suspense_component.rs:286:9
  13: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf::{{closure}}
             at /home/opc/Documents/leptos/tachys/src/reactive_graph/owned.rs:144:13
  14: reactive_graph::owner::Owner::with
             at /home/opc/Documents/leptos/reactive_graph/src/owner.rs:190:19
  15: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf
             at /home/opc/Documents/leptos/tachys/src/reactive_graph/owned.rs:143:9
  16: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf::{{closure}}
             at /home/opc/Documents/leptos/tachys/src/reactive_graph/owned.rs:144:13
  17: reactive_graph::owner::Owner::with
             at /home/opc/Documents/leptos/reactive_graph/src/owner.rs:190:19
  18: <tachys::reactive_graph::owned::OwnedView<T,R> as tachys::view::RenderHtml<R>>::to_html_async_with_buf
             at /home/opc/Documents/leptos/tachys/src/reactive_graph/owned.rs:143:9
  19: tachys::ssr::StreamBuilder::push_async_out_of_order::{{closure}}
             at /home/opc/Documents/leptos/tachys/src/ssr/mod.rs:191:21
  20: <tachys::ssr::StreamBuilder as futures_core::stream::Stream>::poll_next
             at /home/opc/Documents/leptos/tachys/src/ssr/mod.rs:327:31
  21: <tachys::ssr::StreamBuilder as futures_core::stream::Stream>::poll_next
             at /home/opc/Documents/leptos/tachys/src/ssr/mod.rs:383:33
  22: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:50:40
  23: <core::pin::Pin<P> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:120:9
  24: <futures_util::stream::stream::fuse::Fuse<S> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/fuse.rs:53:27
  25: <futures_util::stream::stream::ready_chunks::ReadyChunks<St> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/ready_chunks.rs:40:19
  26: <futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/map.rs:58:26
  27: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:56:9
  28: <core::pin::Pin<P> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:120:9
  29: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:56:9
  30: <futures_util::stream::stream::chain::Chain<St1,St2> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/chain.rs:50:40
  31: <reactive_graph::owner::arena::sandboxed::Sandboxed<T> as futures_core::stream::Stream>::poll_next
             at /home/opc/Documents/leptos/reactive_graph/src/owner/arena.rs:170:23
  32: <futures_util::stream::stream::map::Map<St,F> as futures_core::stream::Stream>::poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.30/src/stream/stream/map.rs:58:26
  33: <S as futures_core::stream::TryStream>::try_poll_next
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.30/src/stream.rs:196:9
  34: <axum_core::body::StreamBody<S> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-core-0.4.3/src/body.rs:205:36
  35: <http_body_util::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/http-body-util-0.1.2/src/combinators/map_err.rs:62:15
  36: <http_body_util::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/http-body-util-0.1.2/src/combinators/box_body.rs:103:9
  37: <axum_core::body::Body as http_body::Body>::poll_frame
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-core-0.4.3/src/body.rs:122:9
  38: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_write
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:373:39
  39: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_loop
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:173:21
  40: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:149:16
  41: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_catch
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:128:28
  42: <hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/proto/h1/dispatch.rs:471:9
  43: <hyper::server::conn::http1::UpgradeableConnection<I,S> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.4.1/src/server/conn/http1.rs:511:26
  44: <hyper_util::server::conn::auto::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-util-0.1.7/src/server/conn/auto.rs:593:28
  45: <axum::serve::Serve<M,S> as core::future::into_future::IntoFuture>::into_future::{{closure}}::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/axum-0.7.5/src/serve.rs:218:26
  46: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:331:17
  47: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/loom/std/unsafe_cell.rs:16:9
  48: tokio::runtime::task::core::Core<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:320:13
  49: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:500:19
  50: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panic/unwind_safe.rs:272:9
  51: std::panicking::try::do_call
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:554:40
  52: __rust_try
  53: std::panicking::try
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:518:19
  54: std::panic::catch_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panic.rs:345:14
  55: tokio::runtime::task::harness::poll_future
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:488:18
  56: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:209:27
  57: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:154:15
  58: tokio::runtime::task::raw::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:271:5
  59: tokio::runtime::task::raw::RawTask::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:201:18
  60: tokio::runtime::task::LocalNotified<S>::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/mod.rs:436:9
  61: tokio::runtime::scheduler::multi_thread::worker::Context::run_task::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:661:17
  62: tokio::runtime::coop::with_budget
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/coop.rs:107:5
  63: tokio::runtime::coop::budget
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/coop.rs:73:5
  64: tokio::runtime::scheduler::multi_thread::worker::Context::run_task
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:597:9
  65: tokio::runtime::scheduler::multi_thread::worker::Context::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:560:24
  66: tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:513:21
  67: tokio::runtime::context::scoped::Scoped<T>::set
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context/scoped.rs:40:9
  68: tokio::runtime::context::set_scheduler::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context.rs:180:26
  69: std::thread::local::LocalKey<T>::try_with
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/thread/local.rs:283:12
  70: std::thread::local::LocalKey<T>::with
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/thread/local.rs:260:9
  71: tokio::runtime::context::set_scheduler
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context.rs:180:9
  72: tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:508:9
  73: tokio::runtime::context::runtime::enter_runtime
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/context/runtime.rs:65:16
  74: tokio::runtime::scheduler::multi_thread::worker::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:500:5
  75: tokio::runtime::scheduler::multi_thread::worker::Launch::launch::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/scheduler/multi_thread/worker.rs:466:45
  76: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/task.rs:42:21
  77: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:331:17
  78: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/loom/std/unsafe_cell.rs:16:9
  79: tokio::runtime::task::core::Core<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/core.rs:320:13
  80: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:500:19
  81: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panic/unwind_safe.rs:272:9
  82: std::panicking::try::do_call
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:554:40
  83: __rust_try
  84: std::panicking::try
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:518:19
  85: std::panic::catch_unwind
             at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panic.rs:345:14
  86: tokio::runtime::task::harness::poll_future
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:488:18
  87: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:209:27
  88: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/harness.rs:154:15
  89: tokio::runtime::task::raw::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:271:5
  90: tokio::runtime::task::raw::RawTask::poll
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/raw.rs:201:18
  91: tokio::runtime::task::UnownedTask<S>::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/task/mod.rs:473:9
  92: tokio::runtime::blocking::pool::Task::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:160:9
  93: tokio::runtime::blocking::pool::Inner::run
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:518:17
  94: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /home/opc/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.40.0/src/runtime/blocking/pool.rs:476:13
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

@gbj
Copy link
Collaborator

gbj commented Sep 2, 2024

Thanks, turns out I was testing it incorrectly.

Here's a simpler reproduction:

#[component]
pub fn App() -> impl IntoView {
    view! {
        <Router>
            <Routes fallback=|| ()>
                <ParentRoute path=path!("") view=Parent>
                    <Route path=path!("") view=Child/>
                </ParentRoute>
            </Routes>
        </Router>
    }
}

#[component]
fn Parent() -> impl IntoView {
    view! {
        <Outlet/>
        <Suspense>
            <Suspense>
                <A href="/new" attr:class="link link-primary">
                    New Item
                </A>
            </Suspense>
        </Suspense>
    }
}

#[component]
pub fn Child() -> impl IntoView {
    view! { <Suspense>{move || {}}</Suspense> }
}

The panic is caused by the prop:state on <A/>.

Each of three conditions is required for it not to remove the SendWrapper around the prop correctly:

  • Suspense in Child
  • nested Suspense in Parent
  • Outlet in parent

If any of those three is removed, it does not panic. If <A/> is not used or <A/> is modified so that it does not use prop:state, of course it does not panic.

I'll have to look at it more to figure out what the underlying issue is, though.

@gbj gbj added the bug Something isn't working label Sep 2, 2024
@gbj
Copy link
Collaborator

gbj commented Sep 2, 2024

This should incidentally be fixed by #2912, which I think is a good idea in any case but which doesn't address the actual problem here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants