Skip to content

PgListener causes a panic on-drop in async fn main() #1389

Closed
@Freyskeyd

Description

@Freyskeyd

Hello,

I ran into an issue with SQLx PgListener when using it with Actix stream.

Everything works fine unless I CtrlC my application. When killing the application I expect that the application stops without panicking, but I'm facing some weird thread 'main' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime'.

When my actor gets dropped he drop the listener stream which execute the drop method on the PgListener.

I suppose that the panic is due to the sqlx_rt trying to execute something on an already closed system.

I'm using rustc 1.54.0, SQLX master - 207e6db2, actix 0.12.0.

I've update the Postgres listen example on my fork to allow anyone to reproduce: https://github.com/Freyskeyd/sqlx/tree/crash_ctrlc/examples/postgres/listen

here's the panic:

^Cthread 'main' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime', sqlx-core/src/postgres/listener.rs:264:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime', sqlx-core/src/pool/connection.rs:77:13
stack backtrace:
   0:        0x1057d0bc4 - std::backtrace_rs::backtrace::libunwind::trace::h03e89bdd1996f493
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
   1:        0x1057d0bc4 - std::backtrace_rs::backtrace::trace_unsynchronized::hb5af08e4de8ca785
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x1057d0bc4 - std::sys_common::backtrace::_print_fmt::h4eafc628aec41041
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:67:5
   3:        0x1057d0bc4 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6a8908fa3ed6f9e8
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:46:22
   4:        0x1057e94bc - core::fmt::write::h4be00f71c5582919
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/fmt/mod.rs:1110:17
   5:        0x1057cc71a - std::io::Write::write_fmt::h49e76926070788f1
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/io/mod.rs:1588:15
   6:        0x1057d29bf - std::sys_common::backtrace::_print::h2f7b8ad2bea4f859
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:49:5
   7:        0x1057d29bf - std::sys_common::backtrace::print::h97402070cfceb1a3
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:36:9
   8:        0x1057d29bf - std::panicking::default_hook::{{closure}}::h1577f0656e419c0e
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:208:50
   9:        0x1057d24bd - std::panicking::default_hook::h1aef594179c4fd25
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:225:9
  10:        0x1057d30c0 - std::panicking::rust_panic_with_hook::h10bc487d002f6c42
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:622:17
  11:        0x1057d2b65 - std::panicking::begin_panic_handler::{{closure}}::hf4cfa78c105ce648
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:519:13
  12:        0x1057d1038 - std::sys_common::backtrace::__rust_end_short_backtrace::h1df96a166e4351c4
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:141:18
  13:        0x1057d2aca - rust_begin_unwind
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:515:5
  14:        0x1057f94cf - core::panicking::panic_fmt::hea8fe6c9e0720810
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/panicking.rs:92:14
  15:        0x1057f93da - core::option::expect_failed::h2f35a999a864e306
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/option.rs:1243:5
  16:        0x1052e7bbb - core::option::Option<T>::expect::h3c109e1a3f68946b
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/option.rs:351:21
  17:        0x1053475c2 - tokio::task::spawn::spawn::h5a96a92310563012
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/task/spawn.rs:132:28
  18:        0x10539bb19 - <sqlx_core::pool::connection::PoolConnection<DB> as core::ops::drop::Drop>::drop::ha5891ffd2cd53079
                               at /opensource/sqlx/sqlx-core/src/pool/connection.rs:77:13
  19:        0x10538bda5 - core::ptr::drop_in_place<sqlx_core::pool::connection::PoolConnection<sqlx_core::postgres::database::Postgres>>::h3353a43a49bfb765
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  20:        0x10538d542 - core::ptr::drop_in_place<<sqlx_core::postgres::listener::PgListener as core::ops::drop::Drop>::drop::{{closure}}>::h100ea8085d10b175
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:264:39
  21:        0x105390b51 - core::ptr::drop_in_place<core::future::from_generator::GenFuture<<sqlx_core::postgres::listener::PgListener as core::ops::drop::Drop>::drop::{{closure}}>>::h9dfa2289234a905e
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  22:        0x105347555 - tokio::task::spawn::spawn::h361ebf3a54aeb73f
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/task/spawn.rs:136:5
  23:        0x10539bd4e - <sqlx_core::postgres::listener::PgListener as core::ops::drop::Drop>::drop::hf523117dfdc00f76
                               at /opensource/sqlx/sqlx-core/src/postgres/listener.rs:264:13
  24:        0x105395de5 - core::ptr::drop_in_place<sqlx_core::postgres::listener::PgListener>::ha3b2f1f652c0b8bd
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  25:        0x10538d264 - core::ptr::drop_in_place<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>::hee35592a83d2ccd2
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:71:9
  26:        0x105390641 - core::ptr::drop_in_place<core::future::from_generator::GenFuture<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>>::haa185195e156cf19
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  27:        0x1053950c9 - core::ptr::drop_in_place<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>::new<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}},core::future::from_generator::GenFuture<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>>::{{closure}}>::h23817b8ee73d8ccd
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:28:33
  28:        0x105395601 - core::ptr::drop_in_place<core::future::from_generator::GenFuture<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>::new<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}},core::future::from_generator::GenFuture<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>>::{{closure}}>>::h3bb35c9d6fc19158
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  29:        0x1053956ef - core::ptr::drop_in_place<core::option::Option<core::future::from_generator::GenFuture<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>::new<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}},core::future::from_generator::GenFuture<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>>::{{closure}}>>>::h1386245c122e5ee6
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  30:        0x105395781 - core::ptr::drop_in_place<futures_util::future::future::fuse::Fuse<core::future::from_generator::GenFuture<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>::new<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}},core::future::from_generator::GenFuture<sqlx_core::postgres::listener::PgListener::into_stream::{{closure}}::{{closure}}>>::{{closure}}>>>::h76afc58f891fb010
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  31:        0x10539109f - core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),sqlx_core::error::Error>+core::marker::Send>>::hb0433ed72663e834
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  32:        0x105391741 - core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),sqlx_core::error::Error>+core::marker::Send>>>::h5a58b0fde7b9b0af
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  33:        0x1052afd74 - core::ptr::drop_in_place<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>>::h8d147d3bf8a35aa0
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  34:        0x1052b05a8 - core::ptr::drop_in_place<alloc::boxed::Box<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>>>::he32a92ac5ee9def7
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  35:        0x1052b0d01 - core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>>>>::h1b72d8eb43d43511
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  36:        0x1052b1431 - core::ptr::drop_in_place<actix::stream::ActorStream<core::pin::Pin<alloc::boxed::Box<sqlx_core::ext::async_stream::TryAsyncStream<sqlx_core::postgres::listener::PgNotification>>>>>::h1dc6a6b88b0412bb
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  37:        0x1052b102f - core::ptr::drop_in_place<alloc::boxed::Box<dyn actix::fut::future::ActorFuture<sqlx_example_postgres_listen::ListenerActor>+Output = ()>>::h57df8a548ecb9c96
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  38:        0x1052b13f1 - core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn actix::fut::future::ActorFuture<sqlx_example_postgres_listen::ListenerActor>+Output = ()>>>::hd6baeff122aeb17f
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  39:        0x1052b1715 - core::ptr::drop_in_place<(actix::actor::SpawnHandle,core::pin::Pin<alloc::boxed::Box<dyn actix::fut::future::ActorFuture<sqlx_example_postgres_listen::ListenerActor>+Output = ()>>)>::h8b4d005fb167894e
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  40:        0x1052b18d0 - core::ptr::drop_in_place<[(actix::actor::SpawnHandle,core::pin::Pin<alloc::boxed::Box<dyn actix::fut::future::ActorFuture<sqlx_example_postgres_listen::ListenerActor>+Output = ()>>)]>::hdac455b5d518b02d
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  41:        0x1052b3f7e - <smallvec::SmallVec<A> as core::ops::drop::Drop>::drop::h753aa409816189c7
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.6.1/src/lib.rs:1716:17
  42:        0x1052b1fa1 - core::ptr::drop_in_place<smallvec::SmallVec<[(actix::actor::SpawnHandle,core::pin::Pin<alloc::boxed::Box<dyn actix::fut::future::ActorFuture<sqlx_example_postgres_listen::ListenerActor>+Output = ()>>); 3]>>::hed2364a0355e0cc2
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  43:        0x1052b1201 - core::ptr::drop_in_place<actix::contextimpl::ContextFut<sqlx_example_postgres_listen::ListenerActor,actix::context::Context<sqlx_example_postgres_listen::ListenerActor>>>::h8baabb5a18d0d398
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  44:        0x1052b15fd - core::ptr::drop_in_place<tokio::runtime::task::core::Stage<actix::contextimpl::ContextFut<sqlx_example_postgres_listen::ListenerActor,actix::context::Context<sqlx_example_postgres_listen::ListenerActor>>>>::h0bd7dcbccbd07960
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  45:        0x105283699 - tokio::runtime::task::core::CoreStage<T>::set_stage::{{closure}}::hcc8ceb7d3639ce3d
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/core.rs:288:35
  46:        0x10529d190 - tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut::h2ac5fd06046d2646
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/loom/std/unsafe_cell.rs:14:9
  47:        0x10528347a - tokio::runtime::task::core::CoreStage<T>::set_stage::h0b621ce748f9082a
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/core.rs:288:9
  48:        0x105282ef6 - tokio::runtime::task::core::CoreStage<T>::drop_future_or_output::h414c088076e094aa
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/core.rs:254:13
  49:        0x105273377 - tokio::runtime::task::harness::cancel_task::{{closure}}::h1e09f95a6e2d8c48
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/harness.rs:387:9
  50:        0x1052af3e5 - core::ops::function::FnOnce::call_once::hfb322d125261dc15
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ops/function.rs:227:5
  51:        0x10528f2c1 - <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfc68792752503ebe
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panic.rs:347:9
  52:        0x1052abdfa - std::panicking::try::do_call::h2e9b8e58c513c7e6
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:401:40
  53:        0x1052ac33b - ___rust_try
  54:        0x1052ab9d2 - std::panicking::try::h21eea6d9a508f199
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:365:19
  55:        0x10528f3d1 - std::panic::catch_unwind::hc76d0e2839857bec
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panic.rs:434:14
  56:        0x105273075 - tokio::runtime::task::harness::cancel_task::h5de85ae161d2187a
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/harness.rs:386:15
  57:        0x105276408 - tokio::runtime::task::harness::Harness<T,S>::shutdown::h6f782ccf6bf9e7d2
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/harness.rs:163:19
  58:        0x1052aa6d2 - tokio::runtime::task::raw::shutdown::h96d91db8e46cf987
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/raw.rs:130:5
  59:        0x1056bde4f - tokio::runtime::task::raw::RawTask::shutdown::h458e9113fa2c4997
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/raw.rs:90:18
  60:        0x105721254 - tokio::runtime::task::Task<S>::shutdown::h9c4eff53ec88c915
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/runtime/task/mod.rs:164:9
  61:        0x105723597 - <tokio::task::local::LocalSet as core::ops::drop::Drop>::drop::{{closure}}::he63cd7d2cc35962a
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/task/local.rs:600:17
  62:        0x1056b8cb8 - tokio::macros::scoped_tls::ScopedKey<T>::set::h060dca12118192c4
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/macros/scoped_tls.rs:61:9
  63:        0x105723462 - tokio::task::local::LocalSet::with::h40cc05681b79dc77
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/task/local.rs:548:9
  64:        0x105723491 - <tokio::task::local::LocalSet as core::ops::drop::Drop>::drop::he8775c1495209492
                               at /tmp/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.6.0/src/task/local.rs:590:9
  65:        0x1056a78d5 - core::ptr::drop_in_place<tokio::task::local::LocalSet>::h67783a68285cea14
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  66:        0x1056a7805 - core::ptr::drop_in_place<actix_rt::runtime::Runtime>::h1a9355317cc36ae7
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  67:        0x1052b2915 - core::ptr::drop_in_place<actix_rt::system::SystemRunner>::h543199ccb33da322
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ptr/mod.rs:192:1
  68:        0x10528ef0d - sqlx_example_postgres_listen::main::h4118475ea6291b6d
                               at /opensource/sqlx/examples/postgres/listen/src/main.rs:16:14
  69:        0x1052af32e - core::ops::function::FnOnce::call_once::h69944caaaada83c4
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ops/function.rs:227:5
  70:        0x105281551 - std::sys_common::backtrace::__rust_begin_short_backtrace::h6c9e6a0b419876d9
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/sys_common/backtrace.rs:125:18
  71:        0x105292f44 - std::rt::lang_start::{{closure}}::ha6852f98ae65ce3a
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:49:18
  72:        0x1057d35e1 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h7adc4e20a318e389
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/core/src/ops/function.rs:259:13
  73:        0x1057d35e1 - std::panicking::try::do_call::h687af85ae86a6e14
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:401:40
  74:        0x1057d35e1 - std::panicking::try::hf74f2790da0186f3
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panicking.rs:365:19
  75:        0x1057d35e1 - std::panic::catch_unwind::hd14a420ea313edb8
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/panic.rs:434:14
  76:        0x1057d35e1 - std::rt::lang_start_internal::h4428f22d05a79c62
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:34:21
  77:        0x105292f1e - std::rt::lang_start::h343b11da32c54d7f
                               at /rustc/a178d0322ce20e33eac124758e837cbd80a6f633/library/std/src/rt.rs:48:5
  78:        0x10528ef46 - _main
thread panicked while panicking. aborting.
zsh: illegal hardware instruction  cargo run

Feel free to ask for more details if needed !

Thank's a lot !

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions