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

[winit 0.21] Examples that set_inner_size during view panic! with "already mutably borrowed" on Windows #461

Closed
mitchmindtree opened this issue Mar 2, 2020 · 1 comment

Comments

@mitchmindtree
Copy link
Member

Out of convenience, many of the nature_of_code and generative_design examples set the size of the window first thing in the view call. This seems to be triggering a bug within winit 0.21 on Windows.

See:

In the meantime, you should be able to work around this bug by removing the set_inner_size call and if necessary set the window size either during window construction or during an update function instead.

Potentially we could work around this in nannou by changing the window's set_inner_size methods to not call directly into the winit::window::Window's set_inner_size method, but instead queue the new size so that it may be updated at a "safe" time. This might be a bit much for a temporary workaround though, but if it proves to be a big enough issue it might be worth it.

Here's the stack trace of the panic!:

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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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\garden.eu.org-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)
mitchmindtree added a commit to mitchmindtree/nannou that referenced this issue Mar 2, 2020
This allows for specifying the window size of a sketch without having to
set the size within the `view` function every frame. Closes nannou-org#461.

Note that as a result of `nannou::sketch(view)` producing a builder
type, you now must call `.run()` to make the sketch do anything.

The `app::Builder` now also supports a `.size(w, h)` builder method for
specifying the default window width and height in points.
@mitchmindtree
Copy link
Member Author

Closed in this commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant