sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit 9642b87b9ed3b99d506738f54fc189776aa0adce
parent 49c937fc878da3ffb155429216ad8298202f1767
Author: Ryan Dwyer <ryandwyer1@gmail.com>
Date:   Thu,  6 Sep 2018 11:39:52 +1000

Fix crash when views rapidly map and unmap

Suppose the following:

* Transactions are already in progress - say transaction A.
* View A maps, which creates transaction B and appends it to the
transaction queue.
* View B maps, which creates transaction C and appends it to the queue.
* View A unmaps, which creates transaction D and appends it to the
queue.
* Transaction A completes, so transaction B attempts to save View A's
buffer, but this doesn't exist so it saves nothing.
* Rendering code attempts to render View A, but there is no saved buffer
nor live buffer that it can use.

Rather than implement an elaborate solution for a rare circumstance,
I've take the safe option of just not rendering anything for that view.
It means that if you reproduce the scenario above, you might get the
title and borders rendered but no surface.

Diffstat:
Msway/desktop/render.c | 2+-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sway/desktop/render.c b/sway/desktop/render.c @@ -266,7 +266,7 @@ static void render_view(struct sway_output *output, pixman_region32_t *damage, struct sway_view *view = con->view; if (view->saved_buffer) { render_saved_view(view, output, damage, view->container->alpha); - } else { + } else if (view->surface) { render_view_toplevels(view, output, damage, view->container->alpha); }