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;
     }
 }