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-sta...@lists.freedesktop.org> > Signed-off-by: Thomas Hellstrom <thellst...@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.daen...@amd.com> -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev