diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
index 7aa4f47..b9b07a8 100644
--- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
+++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
@@ -99,32 +99,36 @@
         
         void drawFrame(boolean drawText) {
             SurfaceHolder sh = getSurfaceHolder();
-            Canvas c = sh.lockCanvas();
-            if (c != null) {
-                final Rect frame = sh.getSurfaceFrame();
-                mBackground.setBounds(frame);
-                mBackground.draw(c);
-                
-                if (drawText) {
-                    // Figure out animation.
-                    long now = SystemClock.uptimeMillis();
-                    while (mAnimStartTime < (now-1000)) {
-                        mAnimStartTime += 1000;
-                        mAnimLarger = !mAnimLarger;
+            Canvas c = null;
+            try {
+                c = sh.lockCanvas();
+                if (c != null) {
+                    final Rect frame = sh.getSurfaceFrame();
+                    mBackground.setBounds(frame);
+                    mBackground.draw(c);
+                    
+                    if (drawText) {
+                        // Figure out animation.
+                        long now = SystemClock.uptimeMillis();
+                        while (mAnimStartTime < (now-1000)) {
+                            mAnimStartTime += 1000;
+                            mAnimLarger = !mAnimLarger;
+                        }
+                        float size = (now-mAnimStartTime) / (float)1000;
+                        if (!mAnimLarger) size = 1-size;
+                        int alpha = (int)(255*(size*size));
+                        mTextPaint.setARGB(alpha, 255, 255, 255);
+                        mTextPaint.setShadowLayer(5*mDensity, 3*mDensity, 3*mDensity,
+                                alpha<<24);
+                        mTextPaint.setTextSize(100 * mDensity * size);
+                        c.drawText("Am I live?",
+                                frame.left + (frame.right-frame.left)/2,
+                                frame.top + (frame.bottom-frame.top)/2, mTextPaint);
                     }
-                    float size = (now-mAnimStartTime) / (float)1000;
-                    if (!mAnimLarger) size = 1-size;
-                    int alpha = (int)(255*(size*size));
-                    mTextPaint.setARGB(alpha, 255, 255, 255);
-                    mTextPaint.setShadowLayer(5*mDensity, 3*mDensity, 3*mDensity,
-                            alpha<<24);
-                    mTextPaint.setTextSize(100 * mDensity * size);
-                    c.drawText("Am I live?",
-                            frame.left + (frame.right-frame.left)/2,
-                            frame.top + (frame.bottom-frame.top)/2, mTextPaint);
                 }
+            } finally {
+                if (c != null) sh.unlockCanvasAndPost(c);
             }
-            sh.unlockCanvasAndPost(c);
         }
     }
     
