From: Alex Deucher Date: Tue, 26 May 2009 15:13:44 +0000 (-0400) Subject: fix segfault when running glxinfo X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=17417fc8eeaf5f88452fa3d37a763cee3c92a28c;p=mesa.git fix segfault when running glxinfo --- 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) {