[Mesa-dev] [PATCH] loader/dri3: Avoid freeing renderbuffers in use

Michel Dänzer michel at daenzer.net
Thu Jan 11 15:32:47 UTC 2018


On 2018-01-11 10:53 AM, Thomas Hellstrom wrote:
> Upon reception of an event that lowered the number of active back buffers,
> the code would immediately try to free all back buffers with an id equal to or
> higher than the new number of active back buffers.
> 
> However, that could lead to an active or to-be-active back buffer being freed,
> since the old number of back buffers was used when obtaining an idle back
> buffer for use.
> 
> This lead to crashes when lowering the number of active back buffers by
> transitioning from page-flipping to non-page-flipping presents.
> 
> Fix this by computing the number of active back buffers only when trying to
> obtain a new back buffer.
> 
> Fixes: 15e208c4cc ("loader/dri3: Don't accidently free buffer holding new back content")
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104214
> Cc: "17.3" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>

[...]

> @@ -402,7 +400,8 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
>              buf->busy = 0;
>  
>           if (buf && draw->num_back <= b && b < LOADER_DRI3_MAX_BACK &&
> -             draw->cur_blit_source != b) {
> +             draw->cur_blit_source != b &&
> +             buf->busy == 0) {
>              dri3_free_render_buffer(draw, buf);
>              draw->buffers[b] = NULL;
>           }

Maybe write this as !buf->busy for consistency with dri3_find_back.
Either way,

Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer


More information about the mesa-dev mailing list