[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