fix to free a plot when purging gr font cache
Review URL: http://codereview.appspot.com/4645054/
git-svn-id: http://skia.googlecode.com/svn/trunk@1667 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrTextStrike.cpp b/gpu/src/GrTextStrike.cpp
index 7aae757..455f88a 100644
--- a/gpu/src/GrTextStrike.cpp
+++ b/gpu/src/GrTextStrike.cpp
@@ -68,15 +68,19 @@
void GrFontCache::purgeExceptFor(GrTextStrike* preserveStrike) {
GrTextStrike* strike = fTail;
- if (strike == preserveStrike) {
- strike = strike->fPrev;
- }
- if (strike) {
- int index = fCache.slowFindIndex(strike);
+ while (strike) {
+ if (strike == preserveStrike) {
+ strike = strike->fPrev;
+ continue;
+ }
+ GrTextStrike* strikeToPurge = strike;
+ // keep going if we won't free up any atlases with this strike.
+ strike = (NULL == strikeToPurge->fAtlas) ? strikeToPurge->fPrev : NULL;
+ int index = fCache.slowFindIndex(strikeToPurge);
GrAssert(index >= 0);
- fCache.removeAt(index, strike->fFontScalerKey->getHash());
- this->detachStrikeFromList(strike);
- delete strike;
+ fCache.removeAt(index, strikeToPurge->fFontScalerKey->getHash());
+ this->detachStrikeFromList(strikeToPurge);
+ delete strikeToPurge;
}
}