From: tokyo4j Date: Sun, 12 Jan 2025 09:18:28 +0000 (+0900) Subject: scaled-scene-buffer: block sharing of buffers created before reconfigure X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=925360ffbadcdb6b05d38225ee59158214b61f3e;p=proto%2Flabwc.git scaled-scene-buffer: block sharing of buffers created before reconfigure This prevents potential bugs that buffers created by scaled_scene_buffers before Reconfigure are reused by other newly created scaled_scene_buffers. This is targeted for scaled_icon_buffer whose buffer creation depends on server->sfdo. --- diff --git a/include/common/scaled-scene-buffer.h b/include/common/scaled-scene-buffer.h index 29f05813..657b9b57 100644 --- a/include/common/scaled-scene-buffer.h +++ b/include/common/scaled-scene-buffer.h @@ -128,6 +128,14 @@ struct scaled_scene_buffer *scaled_scene_buffer_create( void scaled_scene_buffer_request_update(struct scaled_scene_buffer *self, int width, int height); +/** + * scaled_scene_buffer_invalidate_sharing - clear the list of entire cached + * scaled_scene_buffers used to share visually dupliated buffers. This should + * be called on Reconfigure to force updates of newly created + * scaled_scene_buffers rather than reusing ones created before Reconfigure. + */ +void scaled_scene_buffer_invalidate_sharing(void); + /* Private */ struct scaled_scene_buffer_cache_entry { struct wl_list link; /* struct scaled_scene_buffer.cache */ diff --git a/src/common/scaled-scene-buffer.c b/src/common/scaled-scene-buffer.c index c45fc983..7b5d8c40 100644 --- a/src/common/scaled-scene-buffer.c +++ b/src/common/scaled-scene-buffer.c @@ -251,3 +251,13 @@ scaled_scene_buffer_request_update(struct scaled_scene_buffer *self, _update_buffer(self, self->active_scale); } } + +void +scaled_scene_buffer_invalidate_sharing(void) +{ + struct scaled_scene_buffer *scene_buffer, *tmp; + wl_list_for_each_safe(scene_buffer, tmp, &all_scaled_buffers, link) { + wl_list_remove(&scene_buffer->link); + wl_list_init(&scene_buffer->link); + } +} diff --git a/src/server.c b/src/server.c index e4cf2200..2c611bd3 100644 --- a/src/server.c +++ b/src/server.c @@ -31,6 +31,7 @@ #include "drm-lease-v1-protocol.h" #include "common/macros.h" +#include "common/scaled-scene-buffer.h" #include "config/rcxml.h" #include "config/session.h" #include "decorations.h" @@ -68,6 +69,7 @@ static struct wl_event_source *sigchld_source; static void reload_config_and_theme(struct server *server) { + scaled_scene_buffer_invalidate_sharing(); rcxml_finish(); rcxml_read(rc.config_file); theme_finish(server->theme);