glx: If DRI2GetBuffers changes the GL context, call it again
By changing the context, it may also invalidate the DRI2 buffer information, so we need to get that again. Fixes crashes due to use-after-free with LIBGL_ALWAYS_INDIRECT=1 glxgears and piglit. Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
f6abfece3e
commit
a69907288d
|
@ -676,6 +676,13 @@ dri2GetBuffers(__DRIdrawable * driDrawable,
|
|||
if (cx != lastGLContext) {
|
||||
lastGLContext = cx;
|
||||
cx->makeCurrent(cx);
|
||||
|
||||
/* If DRI2GetBuffers() changed the GL context, it may also have
|
||||
* invalidated the DRI2 buffers, so let's get them again
|
||||
*/
|
||||
buffers = DRI2GetBuffers(private->base.pDraw,
|
||||
width, height, attachments, count, out_count);
|
||||
assert(lastGLContext == cx);
|
||||
}
|
||||
|
||||
if (*out_count > MAX_DRAWABLE_BUFFERS) {
|
||||
|
@ -727,6 +734,14 @@ dri2GetBuffersWithFormat(__DRIdrawable * driDrawable,
|
|||
if (cx != lastGLContext) {
|
||||
lastGLContext = cx;
|
||||
cx->makeCurrent(cx);
|
||||
|
||||
/* If DRI2GetBuffersWithFormat() changed the GL context, it may also have
|
||||
* invalidated the DRI2 buffers, so let's get them again
|
||||
*/
|
||||
buffers = DRI2GetBuffersWithFormat(private->base.pDraw,
|
||||
width, height, attachments, count,
|
||||
out_count);
|
||||
assert(lastGLContext == cx);
|
||||
}
|
||||
|
||||
if (*out_count > MAX_DRAWABLE_BUFFERS) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user