Skip to content

i965: Avoid NULL drawbuffer in brw_flush_front

Kenneth Graunke requested to merge kwg/mesa:bug-5957 into staging/21.3

Commit 17e62a3c made _mesa_make_current begin calling ctx->Driver.Flush() in more cases, including when called during context destruction, after _mesa_free_context_data has set ctx->DrawBuffer to NULL. i965's flush hook wasn't prepared for this, and assumed that ctx->DrawBuffer was non-NULL. This led to a crash with the following backtrace:

 #0 0x00007ffff5bf97b5 in _mesa_is_winsys_fbo (fb=0x0)
    at ../../src/mesa/main/fbobject.h:52
 #1 0x00007ffff5bfa359 in brw_flush_front (ctx=0x5555555a4110)
    at ../../src/mesa/drivers/dri/i965/brw_context.c:242
 #2 0x00007ffff5bfa587 in brw_glFlush (ctx=0x5555555a4110,
    gallium_flush_flags=0) at ../../src/mesa/drivers/dri/i965/brw_context.c:301
 #3 0x00007ffff5d46b2b in _mesa_make_current (newCtx=0x0, drawBuffer=0x0,
    readBuffer=0x0) at ../../src/mesa/main/context.c:1616
 #4 0x00007ffff5d46484 in _mesa_free_context_data (ctx=0x5555555a4110,
    destroy_debug_output=true) at ../../src/mesa/main/context.c:1309
 #5 0x00007ffff5bfcb59 in brw_destroy_context (driContextPriv=0x555555590260)
    at ../../src/mesa/drivers/dri/i965/brw_context.c:1301

There is really no point in worrying about front buffer flushing during the context's destruction when we've already discarded the drawbuffer, so just add a NULL check in brw_flush_front and skip that work.

Fixes: 17e62a3c ("mesa: (correctly) flush more in _mesa_make_current") Closes: #5957 (closed)

Edited by Kenneth Graunke

Merge request reports