#266 has resulted in the opening of a baseview window in Ableton to crash. The same plugin built with baseview prior to #266 is able to open with no issues.
The crash is caused by a panic: thread 'unnamed' panicked at 'RefCell already borrowed': C:\programming\external\baseview\src\win\window.rs:526, which corresponds to handle_event calling self.handler.borrow_mut.
It seems that Ableton triggers a number of events while opening the window:
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_MOUSEMOVE CursorEntered
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_MOUSEMOVE CursorMoved
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_SETFOCUS Focused
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_*BUTTON* ButtonReleased { button: Left, modifiers: NUM_LOCK }
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_MOUSEMOVE CursorMoved
13:54:44 [INFO] baseview::win::window: handle_event call site: WM_SIZE Resized
13:54:44 [ERROR] nice_plug::wrapper::util: thread 'unnamed' panicked at 'RefCell already borrowed': C:\programming\external\baseview\src\win\window.rs:526
The panic can be avoided by calling try_borrow_mut:
pub(crate) fn handle_event(&self, event: Event) -> EventStatus {
let Ok(mut handler) = self.handler.try_borrow_mut() else {
return EventStatus::Ignored;
};
let Some(handler) = handler.as_mut() else {
return EventStatus::Ignored;
};
let mut window = crate::window::Window::new(Window { state: self });
handler.on_event(&mut window, event)
}
But this of course causes the event to be ignored.
#266 has resulted in the opening of a baseview window in Ableton to crash. The same plugin built with baseview prior to #266 is able to open with no issues.
The crash is caused by a panic:
thread 'unnamed' panicked at 'RefCell already borrowed': C:\programming\external\baseview\src\win\window.rs:526, which corresponds tohandle_eventcallingself.handler.borrow_mut.It seems that Ableton triggers a number of events while opening the window:
The panic can be avoided by calling
try_borrow_mut:But this of course causes the event to be ignored.