Mesa (master): radeonsi: Fix crash when destroying si_screen

Tom Stellard tstellar at kemper.freedesktop.org
Wed Jan 7 21:29:53 UTC 2015


Module: Mesa
Branch: master
Commit: e28f9d0e60468db429e75a27443f7df52da224a2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e28f9d0e60468db429e75a27443f7df52da224a2

Author: Tom Stellard <thomas.stellard at 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




More information about the mesa-commit mailing list