tauri-apps / tauri

Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
https://tauri.app
Apache License 2.0
82.49k stars 2.48k forks source link

[bug] Emitting events causes panic #10987

Open Skarsh opened 2 weeks ago

Skarsh commented 2 weeks ago

Describe the bug

When emitting events using the app_handle.emit_all() can cause panic. This seems to be linked to the frequency of emitting. When emitting a lot of events in my app, it crashes within a short time frame. But this also happens when there's a lower frequency. I use emitting events through the event system to send a fair bit of data up to the frontend continuously. This has been working fine, except for this issue. In context I am emitting events from different tauri::async_runitme::spawn "threads" since they are consuming different streams and emitting the events up to the frontend.

Reproduction

No response

Expected behavior

Emitting events shouldn't panic.

Full tauri info output

[✔] Environment
    - OS: Windows 10.0.22631 X64
    ✔ WebView2: 128.0.2739.67
    ✔ MSVC: Visual Studio Community 2019
    ✔ rustc: 1.81.0 (eeb90cda1 2024-09-04)
    ✔ cargo: 1.81.0 (2dbb1af80 2024-08-20)
    ✔ rustup: 1.27.1 (54dd3d00f 2024-04-24)
    ✔ Rust toolchain: stable-x86_64-pc-windows-msvc (default)
    - node: 18.17.1
    - npm: 9.6.7

[-] Packages
    - tauri [RUST]: 1.7.2
    - tauri-build [RUST]: 1.5.4
    - wry [RUST]: 0.24.11
    - tao [RUST]: 0.16.10
    - tauri-cli [RUST]: 1.5.9
    - @tauri-apps/api : not installed!
    - @tauri-apps/cli [NPM]: 1.5.6 (outdated, latest: 1.6.1)

[-] App
    - build-type: bundle
    - CSP: unset
    - distDir: ../dist
    - devPath: http://localhost:1420/
    - framework: React
    - bundler: Vite

Stack trace

thread 'main' panicked at library\core\src\panicking.rs:156:5:
unsafe precondition(s) violated: hint::assert_unchecked must never be called when the condition is false
stack backtrace:
thread 'tokio-runtime-worker' panicked at  library\core\src\panicking.rs : 1560:: 5 :
 unsafe precondition(s) violated: hint::assert_unchecked must never be called when the condition is false
 0x7ff751216b1a - std::backtrace_rs::backtrace::dbghelp64::trace
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\..\..\backtrace\src\backtrace\dbghelp64.rs:99
   1:     0x7ff751216b1a - std::backtrace_rs::backtrace::trace_unsynchronized
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2:     0x7ff751216b1a - std::sys_common::backtrace::_print_fmt
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\sys_common\backtrace.rs:68
   3:     0x7ff751216b1a - std::sys_common::backtrace::_print::impl$0::fmt
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\sys_common\backtrace.rs:44
   4:     0x7ff75123e43b - core::fmt::rt::Argument::fmt
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\fmt\rt.rs:142
   5:     0x7ff75123e43b - core::fmt::write
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\fmt\mod.rs:1153
   6:     0x7ff751211961 - std::io::Write::write_fmt<std::sys::pal::windows::stdio::Stderr>
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\io\mod.rs:1843
   7:     0x7ff751216906 - std::sys_common::backtrace::print
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\sys_common\backtrace.rs:34
   8:     0x7ff75121942f - std::panicking::default_hook::closure$1
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:272
   9:     0x7ff7512190c7 - std::panicking::default_hook
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:292
  10:     0x7ff7501fbf53 - alloc::boxed::impl$49::call<tuple$<ref$<core::panic::panic_info::PanicInfo> >,dyn$<core::ops::function::Fn<tuple$<ref$<core::panic::panic_info::PanicInfo> >,assoc$<Output,tuple$<> > >,core::marker::Send,core::marker::Sync>,alloc::alloc::Global>
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\alloc\src\boxed.rs:2034
  11:     0x7ff750301c7e - app::main::closure$0::closure$0
                               at C:\Users\User\Dev\app\src-tauri\src\main.rs:444
  12:     0x7ff75121999c - alloc::boxed::impl$49::call
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\alloc\src\boxed.rs:2034
  13:     0x7ff75121999c - std::panicking::rust_panic_with_hook
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:783
  14:     0x7ff7512197eb - std::panicking::begin_panic_handler::closure$0
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:649
  15:     0x7ff751217429 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure_env$0,never$>
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\sys_common\backtrace.rs:171
  16:     0x7ff7512194e6 - std::panicking::begin_panic_handler
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\panicking.rs:645
  17:     0x7ff751249491 - core::panicking::panic_nounwind_fmt::runtime
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\panicking.rs:110
  18:     0x7ff751249491 - core::panicking::panic_nounwind_fmt
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\panicking.rs:123
  19:     0x7ff751249558 - core::panicking::panic_nounwind
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src\panicking.rs:156
  20:     0x7ff75075ec52 - core::hint::assert_unchecked::precondition_check
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\intrinsics.rs:2799
  21:     0x7ff7507578f6 - alloc::rc::RcInnerPtr::inc_strong<alloc::rc::RcBox<core::cell::RefCell<alloc::vec::Vec<enum2$<tauri_runtime_wry::ActiveTracingSpan>,alloc::alloc::Global> > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\alloc\src\rc.rs:3348
  22:     0x7ff750757985 - alloc::rc::impl$27::clone<core::cell::RefCell<alloc::vec::Vec<enum2$<tauri_runtime_wry::ActiveTracingSpan>,alloc::alloc::Global> >,alloc::alloc::Global>
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\alloc\src\rc.rs:2198
  23:     0x7ff7501a5bde - tauri_runtime_wry::impl$56::clone
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.9\src\lib.rs:247
  24:     0x7ff7502abc08 - tauri_runtime_wry::impl$50::run::closure$0<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,app::main::closure_env$1> >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.9\src\lib.rs:2340
  25:     0x7ff7501bfb6c - tao::platform_impl::platform::event_loop::impl$2::run_return::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$50::run::closure_env$0<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:234
  26:     0x7ff75093d495 - alloc::boxed::impl$48::call_mut<tuple$<enum2$<tao::event::Event<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,ref_mut$<enum2$<tao::event_loop::ControlFlow> > >,dyn$<core::ops::function::FnMut<tuple$<enum2$<tao::event::Event<enu
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\alloc\src\boxed.rs:2027
  27:     0x7ff750a09e84 - tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:250
  28:     0x7ff7509af544 - core::panic::unwind_safe::impl$25::call_once<tuple$<>,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\panic\unwind_safe.rs:272
  29:     0x7ff750978e74 - std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,tuple$<> >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panicking.rs:552
  30:     0x7ff750994413 - tauri::event::impl$12::eq
  31:     0x7ff75097850a - std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panicking.rs:516
  32:     0x7ff750a85629 - std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,tuple$<> >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panic.rs:146
  33:     0x7ff750a07d35 - tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tuple$<>,tao::platform_impl::plat
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:156
  34:     0x7ff750a09bab - tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::call_event_handler<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:242
  35:     0x7ff750a09378 - tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::move_state_to<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:342
  36:     0x7ff750a0a027 - tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::main_events_cleared<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:230
  37:     0x7ff7509fcf89 - tao::platform_impl::platform::event_loop::flush_paint_messages<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:781
  38:     0x7ff7501c055f - tao::platform_impl::platform::event_loop::thread_event_target_callback::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:2186
  39:     0x7ff7500a4e97 - core::ops::function::FnOnce::call_once<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >,tuple$<> >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\ops\function.rs:250
  40:     0x7ff7505926d1 - core::panic::unwind_safe::impl$25::call_once<windows::Windows::Win32::Foundation::LRESULT,tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\panic\unwind_safe.rs:272
  41:     0x7ff7504ab03d - std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Windows::Win32
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panicking.rs:552
  42:     0x7ff7504cb393 - std::panicking::try::do_catch<core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::cancel_task::closure_env$0<core::pin::Pin<alloc::boxed::Box<tracing::instrument::Instrumented<enum2$<tauri::hooks::impl$7::respond_async::async_block_e
  43:     0x7ff75049cf1b - std::panicking::try<windows::Windows::Win32::Foundation::LRESULT,core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMess
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panicking.rs:516
  44:     0x7ff7503d1891 - std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Windows::Win32::Fo
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\panic.rs:146
  45:     0x7ff750472e52 - tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,windows::Windows::Win32::Foundati
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop\runner.rs:156
  46:     0x7ff7501c0179 - tao::platform_impl::platform::event_loop::thread_event_target_callback<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:2275
  47:     0x7fff005f8252 - DefSubclassProc
  48:     0x7fff005f8037 - DSA_InsertItem
  49:     0x7fff1f9982e1 - DispatchMessageW
  50:     0x7fff1f997f9c - DispatchMessageW
  51:     0x7fff1f9a30cd - GetClassLongW
  52:     0x7fff20494174 - KiUserCallbackDispatcher
  53:     0x7fff1dfd1ad4 - NtUserDispatchMessage
  54:     0x7fff1f997e84 - DispatchMessageW
  55:     0x7ff7504dc82f - windows::Windows::Win32::UI::WindowsAndMessaging::DispatchMessageW
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-0.39.0\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:2671
  56:     0x7ff7501bf7ef - tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run_return<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$50::run::closure_env$0<en
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:264
  57:     0x7ff7501bfecb - tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$50::run::closure_env$0<enum2$<ta
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\platform_impl\windows\event_loop.rs:218
  58:     0x7ff7503bd3e8 - tao::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$50::run::closure_env$0<enum2$<tauri::EventLoopMessage>,ta
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.9\src\event_loop.rs:179
  59:     0x7ff7502ab729 - tauri_runtime_wry::impl$50::run<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,app::main::closure_env$1> >
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.9\src\lib.rs:2299
  60:     0x7ff75038a9f4 - tauri::app::App<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >::run<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,app::main::closure_env$1>
                               at C:\Users\User\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-1.7.1\src\app.rs:868
  61:     0x7ff750514626 - app::main
                               at C:\Users\User\Dev\app\src-tauri\src\main.rs:431
  62:     0x7ff7500a805b - core::ops::function::FnOnce::call_once<enum2$<core::result::Result<tuple$<>,alloc::boxed::Box<dyn$<core::error::Error>,alloc::alloc::Global> > > (*)(),tuple$<> >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\core\src\ops\function.rs:250
  63:     0x7ff75002ef8e - std::sys_common::backtrace::__rust_begin_short_backtrace<enum2$<core::result::Result<tuple$<>,alloc::boxed::Box<dyn$<core::error::Error>,alloc::alloc::Global> > > (*)(),enum2$<core::result::Result<tuple$<>,alloc::boxed::Box<dyn$<core::error::Error>,alloc:
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\sys_common\backtrace.rs:155
  64:     0x7ff7505836e1 - std::rt::lang_start::closure$0<enum2$<core::result::Result<tuple$<>,alloc::boxed::Box<dyn$<core::error::Error>,alloc::alloc::Global> > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\rt.rs:166
  65:     0x7ff75120b032 - std::rt::lang_start_internal
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src\rt.rs:148
  66:     0x7ff7505836ba - std::rt::lang_start<enum2$<core::result::Result<tuple$<>,alloc::boxed::Box<dyn$<core::error::Error>,alloc::alloc::Global> > > >
                               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6\library\std\src\rt.rs:165
  67:     0x7ff7505183c9 - main
  68:     0x7ff75124687c - invoke_main
                               at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  69:     0x7ff75124687c - __scrt_common_main_seh
                               at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  70:     0x7fff1ef4257d - BaseThreadInitThunk
  71:     0x7fff2044af28 - RtlUserThreadStart
thread caused non-unwinding panic. aborting.

Additional context

No response

thep0y commented 1 week ago

You should post some relevant code to help reproduce this bug.

Skarsh commented 5 days ago

You should post some relevant code to help reproduce this bug.

Even the most basic app that emits event in a fast recurring loop will trigger this. Similar situation as for #8177 I'll try to make a small example that can reproduce this.