Mercurial > MadButterfly
diff src/redraw_man.c @ 935:960e2395973d
Fix the bug of crash by abort() when running testsvg.js.
The cached coords their pcache areas should be recomputed are also add
ro zeroing list. They have no dirty areas. But, their pcache area
must be added to parent cached coord.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 12 Nov 2010 16:03:19 +0800 |
parents | 8a2d676d9fa3 |
children | 36aef79d68e4 |
line wrap: on
line diff
--- a/src/redraw_man.c Thu Nov 11 00:56:51 2010 +0800 +++ b/src/redraw_man.c Fri Nov 12 16:03:19 2010 +0800 @@ -1828,8 +1828,22 @@ n_areas = _coord_get_dirty_areas(coord)->num; areas = _coord_get_dirty_areas(coord)->ds; - if(n_areas == 0) - abort(); /* should not happen! */ + if(n_areas == 0) { + /* Go here for cached one that is descendant of another zeroed + * one, but itself is not zeroed. It is here for recomputing + * pcache areas. + */ + if(coord_get_flags(coord, COF_JUST_CLEAN | COF_JUST_ZERO)) + abort(); /* should not happen! */ + + parent = coord_get_parent(coord); + pcached_coord = coord_get_cached(parent); + area = coord_get_pcache_area(coord); + add_dirty_area(rdman, pcached_coord, area); + area = coord_get_pcache_last_area(coord); + add_dirty_area(rdman, pcached_coord, area); + return; + } area0 = _coord_get_aggr_dirty_areas(coord); area1 = area0 + 1;