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

[Windows] Not possible to create multiple windows (thread 'main' panicked at 'already mutably borrowed') #1400

Closed
syrel opened this issue Jan 16, 2020 · 5 comments · Fixed by #1461
Labels
B - bug Dang, that shouldn't have happened C - needs investigation Issue must be confirmed and researched D - average Likely as difficult as most tasks here DS - windows H - good first issue Ideal for new contributors H - help wanted Someone please save us P - high Vital to have

Comments

@syrel
Copy link

syrel commented Jan 16, 2020

Hi 🙂

Since 6a330a2 it is not possible to create multiple windows on Windows (10). It can be reproduced with multiwindow example. The single window example works fine though.

PS C:\Users\tester\Documents\GitHub\winit> $ENV:RUST_BACKTRACE = "full"
PS C:\Users\tester\Documents\GitHub\winit> cargo run --example multiwindow
    Finished dev [unoptimized + debuginfo] target(s) in 0.36s
     Running `target\debug\examples\multiwindow.exe`
thread 'main' panicked at 'already mutably borrowed: BorrowError', src\libcore\result.rs:1165:5
stack backtrace:
   0:     0x7ff6b2f461c9 - backtrace::backtrace::trace_unsynchronized
                               at C:\Users\VssAdministrator\.cargo\registry\src\github.com-1ecc6299db9ec823\backtrace-0.3.37\src\backtrace\mod.rs:66
   1:     0x7ff6b2f461c9 - std::sys_common::backtrace::_print_fmt
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\sys_common\backtrace.rs:76   2:     0x7ff6b2f461c9 - std::sys_common::backtrace::_print::{{impl}}::fmt
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\sys_common\backtrace.rs:60   3:     0x7ff6b2f5adfb - core::fmt::write
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libcore\fmt\mod.rs:1030
   4:     0x7ff6b2f433a4 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\io\mod.rs:1412
   5:     0x7ff6b2f48960 - std::sys_common::backtrace::_print
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\sys_common\backtrace.rs:64   6:     0x7ff6b2f48960 - std::sys_common::backtrace::print
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\sys_common\backtrace.rs:49   7:     0x7ff6b2f48960 - std::panicking::default_hook::{{closure}}
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:196
   8:     0x7ff6b2f4858a - std::panicking::default_hook
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:210
   9:     0x7ff6b2f491b8 - std::panicking::rust_panic_with_hook
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:473
  10:     0x7ff6b2f48d24 - std::panicking::continue_panic_fmt
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:380
  11:     0x7ff6b2f48c09 - std::panicking::rust_begin_panic
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:307
  12:     0x7ff6b2f57469 - core::panicking::panic_fmt
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libcore\panicking.rs:85
  13:     0x7ff6b2f5756f - core::result::unwrap_failed
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libcore\result.rs:1165
  14:     0x7ff6b2f02aaf - core::result::Result<core::cell::Ref<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>, core::cell::BorrowError>::expect<core::cell::Ref<core::option::Option<winit::platform_impl::platform::event_loop::runner::
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libcore\result.rs:960
  15:     0x7ff6b2ef517c - core::cell::RefCell<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>::borrow<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libcore\cell.rs:788
  16:     0x7ff6b2ef8508 - winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:133
  17:     0x7ff6b2e8196b - winit::platform_impl::platform::event_loop::SubclassInput<()>::send_event<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:104
  18:     0x7ff6b2e858ec - winit::platform_impl::platform::event_loop::public_window_callback<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:1367
  19:     0x7ffe8273b88a - DefSubclassProc
  20:     0x7ffe8273b745 - DefSubclassProc
  21:     0x7ffe97117446 - DispatchMessageW
  22:     0x7ffe9711716c - DispatchMessageW
  23:     0x7ffe97120a23 - EnumChildWindows
  24:     0x7ffe99ea3494 - KiUserCallbackDispatcher
  25:     0x7ffe96ed1184 - NtUserMessageCall
  26:     0x7ffe97114b16 - GetWindowTextW
  27:     0x7ffe97114488 - GetWindowTextW
  28:     0x7ffe97117446 - DispatchMessageW
  29:     0x7ffe9711716c - DispatchMessageW
  30:     0x7ffe97120a23 - EnumChildWindows
  31:     0x7ffe99ea3494 - KiUserCallbackDispatcher
  32:     0x7ffe96ed1b84 - NtUserShowWindow
  33:     0x7ff6b2efcf76 - winit::platform_impl::platform::window_state::WindowFlags::apply_diff
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window_state.rs:245
  34:     0x7ff6b2e8052f - winit::platform_impl::platform::window_state::WindowState::set_window_flags<closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window_state.rs:141
  35:     0x7ff6b2e7f722 - winit::platform_impl::platform::window::{{impl}}::set_visible::{{closure}}
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window.rs:131
  36:     0x7ff6b2e87a1b - winit::platform_impl::platform::event_loop::EventLoopThreadExecutor::execute_in_thread<closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:420
  37:     0x7ff6b2e77491 - winit::platform_impl::platform::window::Window::set_visible
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window.rs:130
  38:     0x7ff6b2e7ef68 - winit::platform_impl::platform::window::init<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window.rs:779
  39:     0x7ff6b2e7f858 - winit::platform_impl::platform::window::Window::new<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\window.rs:72
  40:     0x7ff6b2e88014 - winit::window::WindowBuilder::build<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\window.rs:333
  41:     0x7ff6b2e8812a - winit::window::Window::new<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\window.rs:359
  42:     0x7ff6b2e72b6b - multiwindow::main::{{closure}}
                               at C:\Users\tester\Documents\GitHub\winit\examples\multiwindow.rs:42
  43:     0x7ff6b2e81834 - winit::platform_impl::platform::event_loop::{{impl}}::run_return::{{closure}}<(),closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:207
  44:     0x7ff6b2f06923 - alloc::boxed::{{impl}}::call_mut<(winit::event::Event<()>, mut winit::event_loop::ControlFlow*),FnMut<(winit::event::Event<()>, mut winit::event_loop::ControlFlow*)>>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\liballoc\boxed.rs:929
  45:     0x7ff6b2efadc6 - winit::platform_impl::platform::event_loop::runner::{{impl}}::call_event_handler::{{closure}}<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:563
  46:     0x7ff6b2f11896 - std::panic::{{impl}}::call_once<(),closure-0>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\panic.rs:315
  47:     0x7ff6b2f25e02 - std::panicking::try::do_call<std::panic::AssertUnwindSafe<closure-0>,()>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\panicking.rs:292
  48:     0x7ff6b2f4bcd2 - panic_unwind::__rust_maybe_catch_panic
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libpanic_unwind\lib.rs:80
  49:     0x7ff6b2f25c63 - std::panicking::try<(),std::panic::AssertUnwindSafe<closure-0>>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\panicking.rs:271
  50:     0x7ff6b2f118d6 - std::panic::catch_unwind<std::panic::AssertUnwindSafe<closure-0>,()>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\panic.rs:394
  51:     0x7ff6b2efab30 - winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::call_event_handler<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:561
  52:     0x7ff6b2efa091 - winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::process_event<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:437
  53:     0x7ff6b2ef8d9b - winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event_unbuffered<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:161
  54:     0x7ff6b2ef8831 - winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop\runner.rs:150
  55:     0x7ff6b2e8196b - winit::platform_impl::platform::event_loop::SubclassInput<()>::send_event<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:104
  56:     0x7ff6b2e83782 - winit::platform_impl::platform::event_loop::public_window_callback<()>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:940
  57:     0x7ffe8273b88a - DefSubclassProc
  58:     0x7ffe8273b745 - DefSubclassProc
  59:     0x7ffe97117446 - DispatchMessageW
  60:     0x7ffe97116f62 - DispatchMessageW
  61:     0x7ff6b2e813d8 - winit::platform_impl::platform::event_loop::EventLoop<()>::run_return<(),closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:235
  62:     0x7ff6b2e8189e - winit::platform_impl::platform::event_loop::EventLoop<()>::run<(),closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\platform_impl\windows\event_loop.rs:192
  63:     0x7ff6b2e88516 - winit::event_loop::EventLoop<()>::run<(),closure-0>
                               at C:\Users\tester\Documents\GitHub\winit\src\event_loop.rs:148
  64:     0x7ff6b2e890f5 - multiwindow::main
                               at C:\Users\tester\Documents\GitHub\winit\examples\multiwindow.rs:18
  65:     0x7ff6b2e7de40 - std::rt::lang_start::{{closure}}<()>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\rt.rs:64
  66:     0x7ff6b2f48b67 - std::rt::lang_start_internal::{{closure}}
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\rt.rs:49
  67:     0x7ff6b2f48b67 - std::panicking::try::do_call<closure-0,i32>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:292
  68:     0x7ff6b2f4bcd2 - panic_unwind::__rust_maybe_catch_panic
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libpanic_unwind\lib.rs:80
  69:     0x7ff6b2f494f2 - std::panicking::try
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panicking.rs:271
  70:     0x7ff6b2f494f2 - std::panic::catch_unwind
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\panic.rs:394
  71:     0x7ff6b2f494f2 - std::rt::lang_start_internal
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\/src\libstd\rt.rs:48
  72:     0x7ff6b2e7de1b - std::rt::lang_start<()>
                               at /rustc/4560ea788cb760f0a34127156c78e2552949f734\src\libstd\rt.rs:64
  73:     0x7ff6b2e89280 - main
  74:     0x7ff6b2f5ed24 - invoke_main
                               at d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  75:     0x7ff6b2f5ed24 - __scrt_common_main_seh
                               at d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  76:     0x7ffe98827974 - BaseThreadInitThunk
  77:     0x7ffe99e6a271 - RtlUserThreadStart
error: process didn't exit successfully: `target\debug\examples\multiwindow.exe` (exit code: 0xc0000409, STATUS_STACK_BUFFER_OVERRUN)
@goddessfreya goddessfreya added DS - windows C - needs investigation Issue must be confirmed and researched B - bug Dang, that shouldn't have happened labels Jan 20, 2020
@goddessfreya goddessfreya added the D - average Likely as difficult as most tasks here label Feb 7, 2020
@filnet
Copy link
Contributor

filnet commented Feb 7, 2020

#1427 has the beginning of an investigation into the issue.

@Imberflur
Copy link
Contributor

This panic also appears to be occur for some windows users when resizing and toggling fullscreen.
As mentioned in #1427 it occurs in send_event where a borrow was added when previously only try_borrow was being used:

    pub(crate) unsafe fn send_event(&self, event: Event<'_, T>) {
        let handling_redraw = self
            .runner
            .borrow()
            .as_ref()
            .map(|r| RunnerState::HandlingRedraw == r.runner_state)
            .unwrap_or(false);
        let mut send = None;
        if handling_redraw {
            if let Event::RedrawRequested(_) = event {
                send = Some(event);
            } else {
                self.buffer_event(event);
            }
        } else {
            send = Some(event);
        }
        if let Some(event) = send {
            if let Err(event) = self.send_event_unbuffered(event) {
                // If the runner is already borrowed, we're in the middle of an event loop invocation. Add
                // the event to a buffer to be processed later.
                self.buffer_event(event);
            }
        }
    }

The quickest solution would be to buffer the RedrawRequested event if the borrow fails. However, I don't know whether this behavior would be desired.

filnet added a commit to filnet/winit that referenced this issue Feb 13, 2020
simplifies the message loops and event handling considerably
strongly inspired from the X11 platform

partially reverts rust-windowing@6a330a2

fixes rust-windowing#1400
fixes rust-windowing#1391
filnet added a commit to filnet/winit that referenced this issue Feb 13, 2020
simplifies the message loops and event handling considerably
strongly inspired from the X11 platform

partially reverts rust-windowing@6a330a2

fixes rust-windowing#1400
fixes rust-windowing#1391
filnet added a commit to filnet/winit that referenced this issue Feb 13, 2020
simplifies the message loops and event handling considerably
strongly inspired from the X11 platform

partially reverts rust-windowing@6a330a2

fixes rust-windowing#1400
fixes rust-windowing#1391
filnet added a commit to filnet/winit that referenced this issue Feb 14, 2020
simplifies the message loops and event handling considerably
strongly inspired from the X11 platform

partially reverts rust-windowing@6a330a2

fixes rust-windowing#1400
fixes rust-windowing#1391
@goddessfreya goddessfreya added H - good first issue Ideal for new contributors H - help wanted Someone please save us P - high Vital to have labels Feb 16, 2020
filnet added a commit to filnet/winit that referenced this issue Feb 24, 2020
simplifies the message loops and event handling considerably
strongly inspired from the X11 platform

partially reverts rust-windowing@6a330a2

fixes rust-windowing#1400
fixes rust-windowing#1391
filnet added a commit to filnet/winit that referenced this issue Feb 25, 2020
These panics were introduced by rust-windowing@6a330a2

Fixes rust-windowing#1391
Fixes rust-windowing#1400
Fixes rust-windowing#1466
Probably fixes other related issues
filnet added a commit to filnet/winit that referenced this issue Feb 25, 2020
filnet added a commit to filnet/winit that referenced this issue Feb 25, 2020
filnet added a commit to filnet/winit that referenced this issue Feb 25, 2020
filnet added a commit to filnet/winit that referenced this issue Feb 26, 2020
filnet added a commit to filnet/winit that referenced this issue Feb 28, 2020
@mitchmindtree
Copy link
Contributor

Just thought I'd add that we're also running into this on Windows in nannou.

We are able to create multiple windows before running the event loop without any issue, however we trigger this same panic! when attempting to set_inner_size after receiving a RedrawRequested event.

Here's the debug stacktrace:

Compiling nannou v0.12.0 (D:\rust\nannou)
    Finished dev [unoptimized + debuginfo] target(s) in 1m 09s
     Running `target\debug\examples\p_1_0_01.exe`
thread 'main' panicked at 'already mutably borrowed: BorrowError', src\libcore\result.rs:1084:5
stack backtrace:
   0: backtrace::backtrace::trace_unsynchronized
             at C:\Users\VssAdministrator\.cargo\registry\src\github.com-1ecc6299db9ec823\backtrace-0.3.34\src\backtrace\mod.rs:66
   1: std::sys_common::backtrace::_print
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\sys_common\backtrace.rs:47
   2: std::sys_common::backtrace::print
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\sys_common\backtrace.rs:36
   3: std::panicking::default_hook::{{closure}}
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:200
   4: std::panicking::default_hook
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:214
   5: std::panicking::rust_panic_with_hook
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:477
   6: std::panicking::continue_panic_fmt
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:384
   7: std::panicking::rust_begin_panic
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:311
   8: core::panicking::panic_fmt
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libcore\panicking.rs:85
   9: core::result::unwrap_failed
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libcore\result.rs:1084
  10: core::result::Result<core::cell::Ref<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>, core::cell::BorrowError>::expect<core::cell::Ref<core::option::Option<winit::platform_impl::platform::event_loop::runner::
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libcore\result.rs:879
  11: core::cell::RefCell<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>::borrow<core::option::Option<winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>>>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libcore\cell.rs:788
  12: winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:133
  13: winit::platform_impl::platform::event_loop::SubclassInput<()>::send_event<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:104
  14: winit::platform_impl::platform::event_loop::public_window_callback<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:770
  15: DefSubclassProc
  16: DefSubclassProc
  17: CallWindowProcW
  18: CallWindowProcW
  19: glPushClientAttrib
  20: CallWindowProcW
  21: DispatchMessageW
  22: IsWindowVisible
  23: KiUserCallbackDispatcher
  24: NtUserMessageCall
  25: SendMessageW
  26: GetWindowTextW
  27: MapWindowPoints
  28: IsCompositionActive
  29: IsCompositionActive
  30: GetWindowTextW
  31: CallWindowProcW
  32: CallWindowProcW
  33: DefSubclassProc
  34: DefSubclassProc
  35: winit::platform_impl::platform::event_loop::public_window_callback<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:744
  36: DefSubclassProc
  37: DefSubclassProc
  38: CallWindowProcW
  39: CallWindowProcW
  40: glPushClientAttrib
  41: CallWindowProcW
  42: DispatchMessageW
  43: MBToWCSEx
  44: KiUserCallbackDispatcher
  45: NtUserSetWindowPos
  46: winit::platform_impl::platform::util::set_inner_size_physical
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\util.rs:106
  47: winit::platform_impl::platform::window::Window::set_inner_size
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\window.rs:231
  48: winit::window::Window::set_inner_size<winit::dpi::LogicalSize<f32>>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\window.rs:493
  49: nannou::window::Window::set_inner_size_points
             at .\src\window.rs:1018
  50: p_1_0_01::view
             at .\examples\generative_design\color\p_1_0_01.rs:38
  51: nannou::app::run_loop::{{closure}}<(),nannou::event::Event>
             at .\src\app.rs:1046
  52: winit::platform_impl::platform::event_loop::{{impl}}::run_return::{{closure}}<(),closure-0>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:207
  53: alloc::boxed::{{impl}}::call_mut<(winit::event::Event<()>, mut winit::event_loop::ControlFlow*),FnMut<(winit::event::Event<()>, mut winit::event_loop::ControlFlow*)>>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\liballoc\boxed.rs:794
  54: winit::platform_impl::platform::event_loop::runner::{{impl}}::call_event_handler::{{closure}}<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:563
  55: std::panic::{{impl}}::call_once<(),closure-0>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\panic.rs:315
  56: std::panicking::try::do_call<std::panic::AssertUnwindSafe<closure-0>,()>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\panicking.rs:296
  57: panic_unwind::__rust_maybe_catch_panic
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libpanic_unwind\lib.rs:80
  58: std::panicking::try<(),std::panic::AssertUnwindSafe<closure-0>>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\panicking.rs:275
  59: std::panic::catch_unwind<std::panic::AssertUnwindSafe<closure-0>,()>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\panic.rs:394
  60: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::call_event_handler<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:561
  61: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::process_event<()>             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:418
  62: winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event_unbuffered<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:161
  63: winit::platform_impl::platform::event_loop::runner::ELRShared<()>::send_event<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop\runner.rs:150
  64: winit::platform_impl::platform::event_loop::SubclassInput<()>::send_event<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:104
  65: winit::platform_impl::platform::event_loop::public_window_callback<()>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:680
  66: DefSubclassProc
  67: DefSubclassProc
  68: CallWindowProcW
  69: CallWindowProcW
  70: glPushClientAttrib
  71: CallWindowProcW
  72: DispatchMessageW
  73: IsWindowVisible
  74: KiUserCallbackDispatcher
  75: NtUserDispatchMessage
  76: DispatchMessageW
  77: winit::platform_impl::platform::event_loop::EventLoop<()>::run_return<(),closure-0>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:254
  78: winit::platform_impl::platform::event_loop::EventLoop<()>::run<(),closure-0>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\platform_impl\windows\event_loop.rs:192
  79: winit::event_loop::EventLoop<()>::run<(),closure-0>
             at C:\Users\josh\.cargo\registry\src\github.com-1ecc6299db9ec823\winit-0.21.0\src\event_loop.rs:148
  80: nannou::app::run_loop<(),nannou::event::Event>
             at .\src\app.rs:940
  81: nannou::app::Builder<(), nannou::event::Event>::run<(),nannou::event::Event>
             at .\src\app.rs:391
  82: nannou::app::Builder<(), nannou::event::Event>::sketch
             at .\src\app.rs:417
  83: nannou::sketch
             at .\src\lib.rs:73
  84: p_1_0_01::main
             at .\examples\generative_design\color\p_1_0_01.rs:34
  85: std::rt::lang_start::{{closure}}<()>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\rt.rs:64
  86: std::rt::lang_start_internal::{{closure}}
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\rt.rs:49
  87: std::panicking::try::do_call<closure-0,i32>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:296
  88: panic_unwind::__rust_maybe_catch_panic
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libpanic_unwind\lib.rs:80
  89: std::panicking::try
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panicking.rs:275
  90: std::panic::catch_unwind
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\panic.rs:394
  91: std::rt::lang_start_internal
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\/src\libstd\rt.rs:48
  92: std::rt::lang_start<()>
             at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54\src\libstd\rt.rs:64
  93: main
  94: invoke_main
             at d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  95: __scrt_common_main_seh
             at d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  96: BaseThreadInitThunk
  97: RtlUserThreadStart
error: process didn't exit successfully: `target\debug\examples\p_1_0_01.exe` (exit code: 0xc0000409, STATUS_STACK_BUFFER_OVERRUN)

@filnet
Copy link
Contributor

filnet commented Mar 2, 2020

@mitchmindtree could you try the branch associated to this PR : #1461

But note that you should probably not change the window state when handling a RedrawRequested. You should only render/repaint the window content when handling RedrawRequested.

@mitchmindtree
Copy link
Contributor

mitchmindtree commented Mar 2, 2020

@filnet I can't test this right now, but will do so later on!

But note that you should probably not change the window state when handling a RedrawRequested

Yes you are right, this issue was the nudge we needed to fix this and we've since addressed it :)

filnet added a commit to filnet/winit that referenced this issue Mar 6, 2020
Osspial pushed a commit that referenced this issue Mar 7, 2020
* On Windows, fix request_redraw() related panics

These panics were introduced by 6a330a2

Fixes #1391
Fixes #1400
Fixes #1466
Probably fixes other related issues

See #1429

* On Windows, replace all calls to UpdateWindow by calls to InvalidateRgn

This avoids directly sending a WM_PAINT message,
which might cause buffering of RedrawRequested events.

We don't want to buffer RedrawRequested events because:
- we wan't to handle RedrawRequested during processing of WM_PAINT messages
- state transitionning is broken when handling buffered RedrawRequested events

Fixes #1469

* On Windows, panic if we are trying to buffer a RedrawRequested event

* On Windows, move modal loop jumpstart to set_modal_loop() method

This fixes a panic.
Note that the WM_PAINT event is now sent to the modal_redraw_method
which is more correct and avoids an unecessary redraw of the window.

Relates to but does does not fix #1484

* On Window, filter by paint messages when draining paint messages

This seems to prevent PeekMessage from dispatching unrelated sent messages

* Change recently added panic/assert calls with warn calls

This makes the code less panicky...

And actually, winit's Windoww callbacks should not panic
because the panic will unwind into Windows code.

It is currently undefined behavior to unwind from Rust code into foreign code.
See https://doc.rust-lang.org/std/panic/fn.catch_unwind.html

* add comments to clarify WM_PAINT handling in non modal loop

* made redraw_events_cleared more explicit and more comments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
B - bug Dang, that shouldn't have happened C - needs investigation Issue must be confirmed and researched D - average Likely as difficult as most tasks here DS - windows H - good first issue Ideal for new contributors H - help wanted Someone please save us P - high Vital to have
Development

Successfully merging a pull request may close this issue.

5 participants