Merge "Add missing try/finallys"
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 60d7c78..924c331 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -178,11 +178,14 @@
 
         Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
         HardwareCanvas canvas = mRootNode.start(mWidth, mHeight);
-        callbacks.onHardwarePostDraw(canvas);
-        canvas.drawDisplayList(view.getDisplayList());
-        callbacks.onHardwarePostDraw(canvas);
-        mRootNode.end(canvas);
-        Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        try {
+            callbacks.onHardwarePostDraw(canvas);
+            canvas.drawDisplayList(view.getDisplayList());
+            callbacks.onHardwarePostDraw(canvas);
+        } finally {
+            mRootNode.end(canvas);
+            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        }
 
         view.mRecreateDisplayList = false;
     }
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index be316e2..cb05b05 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -14897,8 +14897,11 @@
         final int width = bounds.width();
         final int height = bounds.height();
         final HardwareCanvas canvas = displayList.start(width, height);
-        drawable.draw(canvas);
-        displayList.end(canvas);
+        try {
+            drawable.draw(canvas);
+        } finally {
+            displayList.end(canvas);
+        }
 
         // Set up drawable properties that are view-independent.
         displayList.setLeftTopRightBottom(bounds.left, bounds.top, bounds.right, bounds.bottom);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 374787e..23be203 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1514,43 +1514,46 @@
                         mResizeBuffer.prepare(mWidth, mHeight, false);
                         RenderNode layerRenderNode = mResizeBuffer.startRecording();
                         HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight);
-                        final int restoreCount = layerCanvas.save();
+                        try {
+                            final int restoreCount = layerCanvas.save();
 
-                        int yoff;
-                        final boolean scrolling = mScroller != null
-                                && mScroller.computeScrollOffset();
-                        if (scrolling) {
-                            yoff = mScroller.getCurrY();
-                            mScroller.abortAnimation();
-                        } else {
-                            yoff = mScrollY;
+                            int yoff;
+                            final boolean scrolling = mScroller != null
+                                    && mScroller.computeScrollOffset();
+                            if (scrolling) {
+                                yoff = mScroller.getCurrY();
+                                mScroller.abortAnimation();
+                            } else {
+                                yoff = mScrollY;
+                            }
+
+                            layerCanvas.translate(0, -yoff);
+                            if (mTranslator != null) {
+                                mTranslator.translateCanvas(layerCanvas);
+                            }
+
+                            RenderNode renderNode = mView.mRenderNode;
+                            if (renderNode != null && renderNode.isValid()) {
+                                layerCanvas.drawDisplayList(renderNode, null,
+                                        RenderNode.FLAG_CLIP_CHILDREN);
+                            } else {
+                                mView.draw(layerCanvas);
+                            }
+
+                            drawAccessibilityFocusedDrawableIfNeeded(layerCanvas);
+
+                            mResizeBufferStartTime = SystemClock.uptimeMillis();
+                            mResizeBufferDuration = mView.getResources().getInteger(
+                                    com.android.internal.R.integer.config_mediumAnimTime);
+
+                            layerCanvas.restoreToCount(restoreCount);
+                            layerRenderNode.end(layerCanvas);
+                            layerRenderNode.setCaching(true);
+                            layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight);
+                            mTempRect.set(0, 0, mWidth, mHeight);
+                        } finally {
+                            mResizeBuffer.endRecording(mTempRect);
                         }
-
-                        layerCanvas.translate(0, -yoff);
-                        if (mTranslator != null) {
-                            mTranslator.translateCanvas(layerCanvas);
-                        }
-
-                        RenderNode renderNode = mView.mRenderNode;
-                        if (renderNode != null && renderNode.isValid()) {
-                            layerCanvas.drawDisplayList(renderNode, null,
-                                    RenderNode.FLAG_CLIP_CHILDREN);
-                        } else {
-                            mView.draw(layerCanvas);
-                        }
-
-                        drawAccessibilityFocusedDrawableIfNeeded(layerCanvas);
-
-                        mResizeBufferStartTime = SystemClock.uptimeMillis();
-                        mResizeBufferDuration = mView.getResources().getInteger(
-                                com.android.internal.R.integer.config_mediumAnimTime);
-
-                        layerCanvas.restoreToCount(restoreCount);
-                        layerRenderNode.end(layerCanvas);
-                        layerRenderNode.setCaching(true);
-                        layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight);
-                        mTempRect.set(0, 0, mWidth, mHeight);
-                        mResizeBuffer.endRecording(mTempRect);
                         mAttachInfo.mHardwareRenderer.flushLayerUpdates();
                     }
                     mAttachInfo.mContentInsets.set(mPendingContentInsets);
@@ -2949,7 +2952,7 @@
             }
         }
     }
-    
+
     /**
      * Return true if child is an ancestor of parent, (or equal to the parent).
      */