summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2009-05-26 11:13:44 -0400
committerAlex Deucher <alexdeucher@gmail.com>2009-05-26 11:13:44 -0400
commit17417fc8eeaf5f88452fa3d37a763cee3c92a28c (patch)
tree190b00c5bd7dec72c24c71a8bebfaa7430d5db2f
parent4a28974cf59e12f1296526802a4ed3e7160671e4 (diff)
fix segfault when running glxinfo
-rw-r--r--src/mesa/drivers/dri/r600/r600_context.c5
-rw-r--r--src/mesa/drivers/dri/r600/r600_emit.c6
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_common_context.c5
3 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/r600/r600_context.c b/src/mesa/drivers/dri/r600/r600_context.c
index e6c03ecfd51..5be486b176a 100644
--- a/src/mesa/drivers/dri/r600/r600_context.c
+++ b/src/mesa/drivers/dri/r600/r600_context.c
@@ -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);
}
diff --git a/src/mesa/drivers/dri/r600/r600_emit.c b/src/mesa/drivers/dri/r600/r600_emit.c
index dee4cd3435f..e4ba656ee84 100644
--- a/src/mesa/drivers/dri/r600/r600_emit.c
+++ b/src/mesa/drivers/dri/r600/r600_emit.c
@@ -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;
}
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c
index 409825182e3..1e900865f02 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
@@ -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) {