release the scanline textures in GrRectBlurEffect
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 31 Jan 2014 14:00:58 +0000 (14:00 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 31 Jan 2014 14:00:58 +0000 (14:00 +0000)
BUG=skia:
R=robertphillips@google.com

Author: humper@google.com

Review URL: https://codereview.chromium.org/131163007

git-svn-id: http://skia.googlecode.com/svn/trunk@13260 2bbb7eff-a529-9590-31e7-b0007b416f81

src/effects/SkBlurMaskFilter.cpp

index 5cb9815..9b33544 100644 (file)
@@ -527,17 +527,18 @@ public:
      */
     static GrEffectRef* Create(GrContext *context, const SkRect& rect,
                                float sigma) {
-        GrTexture *horizontalScanline, *verticalScanline;
+        GrTexture *horizontalScanline = NULL, *verticalScanline = NULL;
         bool createdScanlines = CreateScanlineTextures(context, sigma,
                                                        SkScalarCeilToInt(rect.width()),
                                                        SkScalarCeilToInt(rect.height()),
                                                        &horizontalScanline, &verticalScanline);
-        if (!createdScanlines) {
+         SkAutoTUnref<GrTexture> hunref(horizontalScanline), vunref(verticalScanline);
+         if (!createdScanlines) {
             return NULL;
         }
         AutoEffectUnref effect(SkNEW_ARGS(GrRectBlurEffect, (rect, sigma,
                                                              horizontalScanline, verticalScanline)));
-        return CreateEffectRef(effect);
+        return CreateEffectRef(effect);    
     }
 
     unsigned int getWidth() const { return fWidth; }
@@ -686,6 +687,7 @@ bool GrRectBlurEffect::CreateScanlineTextures(GrContext *context, float sigma,
                                                    verticalPixels, 0);
 
         if (NULL == *verticalScanline) {
+            (*horizontalScanline)->unref();
             return false;
         }