compositor: Surface is unmapped when surface->output is NULL
surface->buffer can be NULL, which happens when a client destroys the attached buffer. Fixes list corruption on resize.
This commit is contained in:
+2
-3
@@ -1114,7 +1114,7 @@ surface_attach(struct wl_client *client,
|
|||||||
{
|
{
|
||||||
struct weston_surface *es = resource->data;
|
struct weston_surface *es = resource->data;
|
||||||
struct weston_shell *shell = es->compositor->shell;
|
struct weston_shell *shell = es->compositor->shell;
|
||||||
struct wl_buffer *buffer, *prev;
|
struct wl_buffer *buffer;
|
||||||
|
|
||||||
if (!buffer_resource && !es->output)
|
if (!buffer_resource && !es->output)
|
||||||
return;
|
return;
|
||||||
@@ -1134,12 +1134,11 @@ surface_attach(struct wl_client *client,
|
|||||||
|
|
||||||
buffer = buffer_resource->data;
|
buffer = buffer_resource->data;
|
||||||
buffer->busy_count++;
|
buffer->busy_count++;
|
||||||
prev = es->buffer;
|
|
||||||
es->buffer = buffer;
|
es->buffer = buffer;
|
||||||
wl_list_insert(es->buffer->resource.destroy_listener_list.prev,
|
wl_list_insert(es->buffer->resource.destroy_listener_list.prev,
|
||||||
&es->buffer_destroy_listener.link);
|
&es->buffer_destroy_listener.link);
|
||||||
|
|
||||||
if (prev == NULL) {
|
if (es->output == NULL) {
|
||||||
shell->map(shell, es, buffer->width, buffer->height, sx, sy);
|
shell->map(shell, es, buffer->width, buffer->height, sx, sy);
|
||||||
} else if (sx != 0 || sy != 0 ||
|
} else if (sx != 0 || sy != 0 ||
|
||||||
es->geometry.width != buffer->width ||
|
es->geometry.width != buffer->width ||
|
||||||
|
|||||||
Reference in New Issue
Block a user