forked from enlightenment/efl
evas/wayland_shm: Change the buffer sent comparison.
Using the wb->buffer pointer to compare if a buffer was already sent is bad, since the buffer pointer can be changed in a way that that comparison is true, even if different buffers are used. When requesting a new buffer to the wl_shm_pool, it can return the buffer address of a previously freed buffer. This reused buffer pointer can be the same as the last buffer sent to the compositor, and the comparison will be true, skipping a new wl_buffer_attach.
This commit is contained in:
parent
4a1c3d0f57
commit
de5b36583d
|
@ -427,7 +427,7 @@ static void
|
|||
_evas_swapper_buffer_put(Wl_Swapper *ws, Wl_Buffer *wb, Eina_Rectangle *rects, unsigned int count)
|
||||
{
|
||||
Eina_Rectangle *rect;
|
||||
static struct wl_buffer *sent;
|
||||
static Wl_Buffer *sent = NULL;
|
||||
|
||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||
|
||||
|
@ -469,12 +469,12 @@ _evas_swapper_buffer_put(Wl_Swapper *ws, Wl_Buffer *wb, Eina_Rectangle *rects, u
|
|||
}
|
||||
|
||||
/* surface attach */
|
||||
if (sent != wb->buffer)
|
||||
if (sent != wb)
|
||||
{
|
||||
wl_surface_attach(ws->surface, wb->buffer, ws->dx, ws->dy);
|
||||
ws->dx = 0;
|
||||
ws->dy = 0;
|
||||
sent = wb->buffer;
|
||||
sent = wb;
|
||||
}
|
||||
|
||||
/* surface damage */
|
||||
|
|
Loading…
Reference in New Issue