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.
_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__);
}
/* 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 */