Check for heap == NULL before driSetTextureSwapCounterLocation.
diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c
index 5592d09..1ce8a4b 100644
--- a/src/mesa/drivers/dri/savage/savage_xmesa.c
+++ b/src/mesa/drivers/dri/savage/savage_xmesa.c
@@ -379,8 +379,11 @@
 	    &imesa->swapped,
 	    sizeof( savageTexObj ),
 	    (destroy_texture_object_t *) savageDestroyTexObj );
-       driSetTextureSwapCounterLocation( imesa->textureHeaps[i],
-					 & imesa->c_textureSwaps );
+       /* If textureSize[i] == 0 textureHeaps[i] is NULL. This can happen
+	* if there is not enough card memory for a card texture heap. */
+       if (imesa->textureHeaps[i])
+	   driSetTextureSwapCounterLocation( imesa->textureHeaps[i],
+					     & imesa->c_textureSwaps );
    }
    imesa->texture_depth = driQueryOptioni (&imesa->optionCache,
 					   "texture_depth");