OSDN Git Service

add some logs to track a crash in eglCreateImageKHR
authorMathias Agopian <mathias@google.com>
Tue, 9 Aug 2011 02:35:15 +0000 (19:35 -0700)
committerMathias Agopian <mathias@google.com>
Tue, 9 Aug 2011 02:36:22 +0000 (19:36 -0700)
Bug: 5111008

Change-Id: I3e7f5b986151e80cbded39e0dec057770da52fc1

libs/gui/SurfaceTexture.cpp

index 1a036ee..07789b3 100644 (file)
@@ -628,16 +628,32 @@ status_t SurfaceTexture::updateTexImage() {
     LOGV("SurfaceTexture::updateTexImage");
     Mutex::Autolock lock(mMutex);
 
+    if (mAbandoned) {
+        LOGE("calling updateTexImage() on an abandoned SurfaceTexture");
+        //return NO_INIT;
+    }
+
     // In asynchronous mode the list is guaranteed to be one buffer
     // deep, while in synchronous mode we use the oldest buffer.
     if (!mQueue.empty()) {
         Fifo::iterator front(mQueue.begin());
         int buf = *front;
 
+        if (uint32_t(buf) >= NUM_BUFFER_SLOTS) {
+            LOGE("buffer index out of range (index=%d)", buf);
+            //return BAD_VALUE;
+        }
+
         // Update the GL texture object.
         EGLImageKHR image = mSlots[buf].mEglImage;
         if (image == EGL_NO_IMAGE_KHR) {
             EGLDisplay dpy = eglGetCurrentDisplay();
+
+            if (mSlots[buf].mGraphicBuffer == 0) {
+                LOGE("buffer at slot %d is null", buf);
+                //return BAD_VALUE;
+            }
+
             image = createImage(dpy, mSlots[buf].mGraphicBuffer);
             mSlots[buf].mEglImage = image;
             mSlots[buf].mEglDisplay = dpy;