Fix panic about multiple mutable borrows with the software renderer

When using repeaters - like in the slide puzzle - and during renderer a component
gets deleted, we call free_graphics_resources and try to free
the dirty rectangle list in the partial renderer cache. At that point the cache is
already mutably borrowed, which causes a panic.

As remedy, apply the mutable borrow more fine grained and not right when calling
render().
This commit is contained in:
Simon Hausmann 2022-06-09 17:55:37 +02:00 committed by Simon Hausmann
parent 100eb305a3
commit 2d2eb70b51
4 changed files with 26 additions and 20 deletions

View file

@ -131,7 +131,7 @@ mod the_backend {
items: &mut dyn Iterator<Item = Pin<i_slint_core::items::ItemRef<'a>>>,
) {
super::LINE_RENDERER.with(|renderer| {
renderer.borrow_mut().free_graphics_resources(items);
renderer.borrow().free_graphics_resources(items);
});
}
@ -346,7 +346,7 @@ mod the_backend {
};
LINE_RENDERER.with(|renderer| {
renderer.borrow_mut().render(
renderer.borrow().render(
runtime_window,
window.initial_dirty_region_for_next_frame.take(),
buffer_provider,