diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index 920fdfb..f549f3d 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -226,12 +226,15 @@
                 GLES20.GL_VERTEX_SHADER);
         int fshader = loadShader(context, com.android.internal.R.raw.color_fade_frag,
                 GLES20.GL_FRAGMENT_SHADER);
+        GLES20.glReleaseShaderCompiler();
         if (vshader == 0 || fshader == 0) return false;
 
         mProgram = GLES20.glCreateProgram();
 
         GLES20.glAttachShader(mProgram, vshader);
         GLES20.glAttachShader(mProgram, fshader);
+        GLES20.glDeleteShader(vshader);
+        GLES20.glDeleteShader(fshader);
 
         GLES20.glLinkProgram(mProgram);
 
@@ -254,6 +257,11 @@
         return true;
     }
 
+    private void destroyGLShaders() {
+        GLES20.glDeleteProgram(mProgram);
+        checkGlErrors("glDeleteProgram");
+    }
+
     private boolean initGLBuffers() {
         //Fill vertices
         setQuad(mVertexBuffer, 0, 0, mDisplayWidth, mDisplayHeight);
@@ -288,6 +296,11 @@
         return true;
     }
 
+    private void destroyGLBuffers() {
+        GLES20.glDeleteBuffers(2, mGLBuffers, 0);
+        checkGlErrors("glDeleteBuffers");
+    }
+
     private static void setQuad(FloatBuffer vtx, float x, float y, float w, float h) {
         if (DEBUG) {
             Slog.d(TAG, "setQuad: x=" + x + ", y=" + y + ", w=" + w + ", h=" + h);
@@ -314,10 +327,20 @@
             Slog.d(TAG, "dismiss");
         }
 
-        destroyScreenshotTexture();
-        destroyEglSurface();
-        destroySurface();
-        mPrepared = false;
+        if (mPrepared) {
+            attachEglContext();
+            try {
+                destroyScreenshotTexture();
+                destroyGLShaders();
+                destroyGLBuffers();
+                destroyEglSurface();
+            } finally {
+                detachEglContext();
+            }
+            destroySurface();
+            GLES20.glFlush();
+            mPrepared = false;
+        }
     }
 
     /**
@@ -468,14 +491,8 @@
     private void destroyScreenshotTexture() {
         if (mTexNamesGenerated) {
             mTexNamesGenerated = false;
-            if (attachEglContext()) {
-                try {
-                    GLES20.glDeleteTextures(1, mTexNames, 0);
-                    checkGlErrors("glDeleteTextures");
-                } finally {
-                    detachEglContext();
-                }
-            }
+            GLES20.glDeleteTextures(1, mTexNames, 0);
+            checkGlErrors("glDeleteTextures");
         }
     }
 
