Commit 3160cb86aa92 adds optimization with flag 'reallocate'. Processing of flag causes buffers freeing while pointer is still hold in caller stack and than again used to be freed.
Fixes: 3160cb86aa92 "egl/x11: Re-allocate buffers if format is suboptimal" v2: used flag 'busy' instead of introducing new one. v3: added searching for back-buffer after potential freeing previous one. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105906 Signed-off-by: Sergii Romantsov <sergii.romant...@globallogic.com> Tested-by: Andriy Khulap <andriy.khu...@globallogic.com> --- src/loader/loader_dri3_helper.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index fe17df1..6524afc 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -1688,6 +1688,7 @@ dri3_get_buffer(__DRIdrawable *driDrawable, (buffer_type == loader_dri3_buffer_front && draw->have_fake_front)) && buffer) { + buffer->busy = true; /* Fill the new buffer with data from an old buffer */ dri3_fence_await(draw->conn, draw, buffer); if (!loader_dri3_blit_image(draw, @@ -1731,6 +1732,12 @@ dri3_get_buffer(__DRIdrawable *driDrawable, draw->buffers[buf_id] = buffer; } dri3_fence_await(draw->conn, draw, buffer); + if (buffer_type == loader_dri3_buffer_back) { + buf_id = dri3_find_back(draw); + if (buf_id < 0) + return NULL; + } + buffer = draw->buffers[buf_id]; /* * Do we need to preserve the content of a previous buffer? -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev