fix segfault when running glxinfo
authorAlex Deucher <alexdeucher@gmail.com>
Tue, 26 May 2009 15:13:44 +0000 (11:13 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Tue, 26 May 2009 15:13:44 +0000 (11:13 -0400)
src/mesa/drivers/dri/r600/r600_context.c
src/mesa/drivers/dri/r600/r600_emit.c
src/mesa/drivers/dri/radeon/radeon_common_context.c

index e6c03ecfd51e0c2dbc7c2c7084bc8c95b3dcb392..5be486b176a6f95b3c486677bc47563378537ba0 100644 (file)
@@ -453,9 +453,10 @@ void
 r600DestroyContext (__DRIcontextPrivate * driContextPriv)
 {
     GET_CURRENT_CONTEXT (ctx);
-    context_t *context = R700_CONTEXT(ctx);
+    context_t *context = ctx ? R700_CONTEXT(ctx) : NULL;
 
-    (context->chipobj.DestroyChipObj)(context->chipobj.pvChipObj);
+    if (context)
+           (context->chipobj.DestroyChipObj)(context->chipobj.pvChipObj);
 }
 
 
index dee4cd3435fab96984105c28466fd7e5983d6cd1..e4ba656ee84f0506909d31b34667f4891fa2753a 100644 (file)
@@ -234,8 +234,10 @@ GLboolean r600DeleteShader(GLcontext * ctx,
 {
     struct radeon_bo * pbo = (struct radeon_bo *)shaderbo;
 
-    radeon_bo_unmap(pbo);
-    radeon_bo_unref(pbo); /* when bo->cref <= 0, bo will be bo_free */
+    if (pbo) {
+           radeon_bo_unmap(pbo);
+           radeon_bo_unref(pbo); /* when bo->cref <= 0, bo will be bo_free */
+    }
 
     return GL_TRUE;
 }
index 409825182e382b5465a49640e31686b8536319cb..1e900865f02d52313e7eca1beb1809da86e696a0 100644 (file)
@@ -233,7 +233,7 @@ void radeonDestroyContext(__DRIcontextPrivate *driContextPriv )
 #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R600) /* +r6/r7 */
            if (IS_R600_CLASS(screen))
         {
-                   r600DestroyContext(driContextPriv);
+               r600DestroyContext(driContextPriv);
         }
 #endif
 
@@ -267,6 +267,9 @@ void radeonDestroyContext(__DRIcontextPrivate *driContextPriv )
                
                rcommonDestroyCmdBuf(radeon);
 
+#if RADEON_COMMON && defined(RADEON_COMMON_FOR_R600) /* +r6/r7 */
+           if (!IS_R600_CLASS(screen))
+#endif
                radeon_destroy_atom_list(radeon);
 
                if (radeon->state.scissor.pClipRects) {