fix a texture leak introduced recently.

create the texture name once and for all for a given BufferSource
and make sure to recreate it when we're forced to delete the texture.
diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp
index 091856f..b9727ab 100644
--- a/libs/surfaceflinger/LayerBuffer.cpp
+++ b/libs/surfaceflinger/LayerBuffer.cpp
@@ -444,6 +444,10 @@
     NativeBuffer src(ourBuffer->getBuffer());
     const Rect transformedBounds(mLayer.getTransformedBounds());
 
+    if (UNLIKELY(mTexture.name == -1LU)) {
+        mTexture.name = mLayer.createTexture();
+    }
+
 #if defined(EGL_ANDROID_image_native_buffer)
     if (mLayer.mFlags & DisplayHardware::DIRECT_TEXTURE) {
         copybit_device_t* copybit = mLayer.mBlitEngine;
@@ -483,9 +487,6 @@
         t.format = src.img.format;
         t.data = (GGLubyte*)src.img.base;
         const Region dirty(Rect(t.width, t.height));
-        if (UNLIKELY(mTexture.name == -1LU)) {
-            mTexture.name = mLayer.createTexture();
-        }
         mLayer.loadTexture(&mTexture, dirty, t);
     }
 
@@ -566,11 +567,17 @@
 
 void LayerBuffer::BufferSource::clearTempBufferImage() const
 {
+    // delete the image
     EGLDisplay dpy(mLayer.mFlinger->graphicPlane(0).getEGLDisplay());
-    glDeleteTextures(1, &mTexture.name);
     eglDestroyImageKHR(dpy, mTexture.image);
+
+    // and the associated texture (recreate a name)
+    glDeleteTextures(1, &mTexture.name);
     Texture defaultTexture;
     mTexture = defaultTexture;
+    mTexture.name = mLayer.createTexture();
+
+    // and the associated buffer
     mTempGraphicBuffer.clear();
 }