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.
This commit is contained in:
tokyo4j 2025-01-12 18:18:28 +09:00 committed by Hiroaki Yamamoto
parent c49f577c6b
commit 925360ffba
3 changed files with 20 additions and 0 deletions

View file

@ -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 */

View file

@ -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);
}
}

View file

@ -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);