Skip to content

Crash when changing a viewport aspect, that requires window recreation #3959

@AnotherNathan

Description

@AnotherNathan

Description
When changing something on a viewport, that requires the recreation of the viewport window in order to apply the change, the application crashes.

I have only observed it on the glow backend, since the wgpu crashes immediately for me.

Sometimes I am getting a stack trace with a handle error and other times the application simply closes without any additional output.

The provided example changes, whether the viewport should show the close button or not (which internally requires the recreation of the viewport window).

Stacktrace
thread 'main' panicked at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\glow_integration.rs:815:69: 
called `Result::unwrap()` on an `Err` value: Error { raw_code: Some(6), raw_os_message: Some("Das Handle ist ungültig. (os error 6)"), kind: Misc }
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library\std\src\panicking.rs:645
   1: core::panicking::panic_fmt
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library\core\src\panicking.rs:72
   2: core::result::unwrap_failed
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library\core\src\result.rs:1653
   3: enum2$<core::result::Result<enum2$<glutin::context::PossiblyCurrentContext>,glutin::error::Error> >::unwrap<enum2$<glutin::context::PossiblyCurrentContext>,glutin::error::Error>
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\result.rs:1077
   4: eframe::native::glow_integration::change_gl_context
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\glow_integration.rs:815
   5: eframe::native::glow_integration::GlowWinitRunning::run_ui_and_paint
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\glow_integration.rs:621
   6: eframe::native::glow_integration::impl$1::run_ui_and_paint
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\glow_integration.rs:402
   7: eframe::native::run::run_and_return::closure$0<eframe::native::glow_integration::GlowWinitApp>
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:99
   8: winit::platform_impl::platform::event_loop::impl$3::run_on_demand::closure$0<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integration::GlowWinitApp> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:236
   9: alloc::boxed::impl$48::call_mut<tuple$<enum2$<winit::event::Event<enum2$<eframe::native::winit_integration::UserEvent> > > >,dyn$<core::ops::function::FnMut<tuple$<enum2$<winit::event::Event<enum2$<eframe::native::winit_integration::UserEvent> > > >,assoc
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\alloc\src\boxed.rs:2014
  10: winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:250
  11: core::panic::unwind_safe::impl$23::call_once<tuple$<>,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\panic\unwind_safe.rs:272
  12: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panicking.rs:552
  13: glutin::api::wgl::surface::impl$2::resize<glutin::surface::WindowSurface>
  14: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > > >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panicking.rs:516
  15: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panic.rs:142
  16: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::catch_unwind<enum2$<eframe::native::winit_integration::UserEvent>,tuple$<>,winit::platform_impl::platform::event_loop::runner::impl
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:183
  17: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::call_event_handler<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:246
  18: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::send_event<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:224
  19: winit::platform_impl::platform::event_loop::WindowData<enum2$<eframe::native::winit_integration::UserEvent> >::send_event<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:112
  20: winit::platform_impl::platform::event_loop::public_window_callback_inner::closure$4<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:1145
  21: core::ops::function::FnOnce::call_once<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> >,tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\ops\function.rs:250
  22: core::panic::unwind_safe::impl$23::call_once<tuple$<>,winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\panic\unwind_safe.rs:272
  23: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panicking.rs:552
  24: glutin::api::wgl::surface::impl$2::resize<glutin::surface::WindowSurface>
  25: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > > >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panicking.rs:516
  26: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\panic.rs:142
  27: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::catch_unwind<enum2$<eframe::native::winit_integration::UserEvent>,tuple$<>,winit::platform_impl::platform::event_loop::public_windo
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:183
  28: winit::platform_impl::platform::event_loop::public_window_callback_inner<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:2286
  29: winit::platform_impl::platform::event_loop::public_window_callback<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:984
  30: CallWindowProcW
  31: DispatchMessageW
  32: SendMessageTimeoutW
  33: KiUserCallbackDispatcher
  34: NtUserDispatchMessage
  35: DispatchMessageW
  36: winit::platform_impl::platform::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> >::dispatch_peeked_messages<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:449
  37: winit::platform_impl::platform::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> >::run_on_demand<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integr
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:247
  38: winit::platform::run_on_demand::impl$0::run_on_demand<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integration::GlowWinitApp> >
             at C:\Users\Nathan\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform\run_on_demand.rs:80
  39: eframe::native::run::run_and_return<eframe::native::glow_integration::GlowWinitApp>
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:76
  40: eframe::native::run::run_glow::closure$0
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:394
  41: eframe::native::run::with_event_loop::closure$0<enum2$<core::result::Result<tuple$<>,enum2$<eframe::Error> > >,eframe::native::run::run_glow::closure_env$0>
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:58
  42: std::thread::local::LocalKey<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> > > > > >::try_with<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop      
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\thread\local.rs:270
  43: std::thread::local::LocalKey<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> > > > > >::with<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enu      
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\std\src\thread\local.rs:246
  44: eframe::native::run::with_event_loop<enum2$<core::result::Result<tuple$<>,enum2$<eframe::Error> > >,eframe::native::run::run_glow::closure_env$0>
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:48
  45: eframe::native::run::run_glow
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\native\run.rs:392
  46: eframe::run_native
             at C:\Users\Nathan\.cargo\git\checkouts\egui-5e4507fa4153be06\114f820\crates\eframe\src\lib.rs:262
  47: egui_window_recreate_bug::main
             at .\src\main.rs:11
  48: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\ops\function.rs:250
  49: core::hint::black_box
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112\library\core\src\hint.rs:286

Steps to reproduce the behaviour

  • run the provided example
  • click the checkbox on the main window
  • observe the crash

Platform

  • Windows 10
  • RX7600 driver version 23.12.1

Example
egui_window_recreate_bug.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashcrash, panic, segfault, freeze, …egui_glowRelates to running egui_glow on nativenative-windowsRunning on native Windows OSviewportsmultiple viewports, viewports API

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions