From: Kenneth Graunke Date: Wed, 4 Jan 2012 23:45:49 +0000 (-0800) Subject: i965: Fix infinite loop regression in intel_miptree_all_slices_resolve. X-Git-Tag: android-x86-4.4-r1~7927 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a0a0a909f21acfcddaab603079ba98266e8daf0e;p=android-x86%2Fexternal-mesa.git i965: Fix infinite loop regression in intel_miptree_all_slices_resolve. Commit 0ed11e333147e280208d9d0b3ff3f39970547643 fixed a "use after free" bug by getting the next pointer before deleting the current node. Unfortunately, it also made "next" never get updated if i->need != need. Fixes infinite loops in piglit tests fbo-depth-array and fbo-depthtex. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt Reviewed-by: Ian Romanick --- diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 7787c1a87af..4e1a502a51b 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -643,10 +643,10 @@ intel_miptree_all_slices_resolve(struct intel_context *intel, struct intel_resolve_map *i, *next; for (i = mt->hiz_map.next; i; i = next) { + next = i->next; if (i->need != need) continue; func(intel, mt, i->level, i->layer); - next = i->next; intel_resolve_map_remove(i); did_resolve = true; }