Module: Mesa Branch: master Commit: e28f9d0e60468db429e75a27443f7df52da224a2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e28f9d0e60468db429e75a27443f7df52da224a2
Author: Tom Stellard <thomas.stell...@amd.com> Date: Wed Jan 7 13:49:12 2015 -0500 radeonsi: Fix crash when destroying si_screen We were invalidating si_screen:tm by calling r600_destroy_common_screen() which frees the si_screen object. This caused the driver to crash in LLVMDisposeTargetMachine() since we were passing it an invalid pointer. https://bugs.freedesktop.org/show_bug.cgi?id=88170 --- src/gallium/drivers/radeonsi/si_pipe.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 38bff31..e3f8fcf 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -424,11 +424,13 @@ static void si_destroy_screen(struct pipe_screen* pscreen) if (!sscreen->b.ws->unref(sscreen->b.ws)) return; - r600_destroy_common_screen(&sscreen->b); - #if HAVE_LLVM >= 0x0306 + // r600_destroy_common_screen() frees sscreen, so we need to make + // sure to dispose the TargetMachine before we call it. LLVMDisposeTargetMachine(sscreen->tm); #endif + + r600_destroy_common_screen(&sscreen->b); } #define SI_TILE_MODE_COLOR_2D_8BPP 14 _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit