Destroy the GL context after driDestroyTextureHeap, because the driver's
authorEric Anholt <anholt@FreeBSD.org>
Sun, 9 Apr 2006 17:48:28 +0000 (17:48 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Sun, 9 Apr 2006 17:48:28 +0000 (17:48 +0000)
DestroyTexObj has a dependence on the glCtx and may segfault otherwise.

src/mesa/drivers/dri/r128/r128_context.c
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/radeon/radeon_context.c

index 75f618ad37aed0c498c2ef018e5e575d2058b0b4..6194d128f4bb62977079a498501cecc7749d32de 100644 (file)
@@ -296,10 +296,6 @@ void r128DestroyContext( __DRIcontextPrivate *driContextPriv  )
       _ac_DestroyContext( rmesa->glCtx );
       _swrast_DestroyContext( rmesa->glCtx );
 
-      /* free the Mesa context */
-      rmesa->glCtx->DriverCtx = NULL;
-      _mesa_destroy_context(rmesa->glCtx);
-
       if ( release_texture_heaps ) {
          /* This share group is about to go away, free our private
           * texture object data.
@@ -314,6 +310,10 @@ void r128DestroyContext( __DRIcontextPrivate *driContextPriv  )
         assert( is_empty_list( & rmesa->swapped ) );
       }
 
+      /* free the Mesa context */
+      rmesa->glCtx->DriverCtx = NULL;
+      _mesa_destroy_context(rmesa->glCtx);
+
       /* free the option cache */
       driDestroyOptionCache (&rmesa->optionCache);
 
index 210feddb6a9072678900ea8b2896eb0b02ee4790..aaaaa5a95bfb5bfc0f4aff05ecd68b00ccb7430f 100644 (file)
@@ -590,10 +590,6 @@ void r200DestroyContext( __DRIcontextPrivate *driContextPriv )
            r200VtxfmtDestroy( rmesa->glCtx );
       }
 
-      /* free the Mesa context */
-      rmesa->glCtx->DriverCtx = NULL;
-      _mesa_destroy_context( rmesa->glCtx );
-
       if (rmesa->state.scissor.pClipRects) {
         FREE(rmesa->state.scissor.pClipRects);
         rmesa->state.scissor.pClipRects = NULL;
@@ -613,6 +609,10 @@ void r200DestroyContext( __DRIcontextPrivate *driContextPriv )
         assert( is_empty_list( & rmesa->swapped ) );
       }
 
+      /* free the Mesa context */
+      rmesa->glCtx->DriverCtx = NULL;
+      _mesa_destroy_context( rmesa->glCtx );
+
       /* free the option cache */
       driDestroyOptionCache (&rmesa->optionCache);
 
index 4c7730485b73cc9881d2de7f78282191bdb0433b..21161d2f69d2f6893ceaa1a8761e44dd8d7322d6 100644 (file)
@@ -521,10 +521,6 @@ void radeonDestroyContext( __DRIcontextPrivate *driContextPriv )
            radeonVtxfmtDestroy( rmesa->glCtx );
       }
 
-      /* free the Mesa context */
-      rmesa->glCtx->DriverCtx = NULL;
-      _mesa_destroy_context( rmesa->glCtx );
-
       _mesa_vector4f_free( &rmesa->tcl.ObjClean );
 
       if (rmesa->state.scissor.pClipRects) {
@@ -546,6 +542,10 @@ void radeonDestroyContext( __DRIcontextPrivate *driContextPriv )
         assert( is_empty_list( & rmesa->swapped ) );
       }
 
+      /* free the Mesa context */
+      rmesa->glCtx->DriverCtx = NULL;
+      _mesa_destroy_context( rmesa->glCtx );
+
       /* free the option cache */
       driDestroyOptionCache (&rmesa->optionCache);