From f3209b03b3adbf6868c2dcadb07adc5f865f5688 Mon Sep 17 00:00:00 2001 From: Prathmesh Prabhu Date: Wed, 9 Mar 2016 16:54:45 -0800 Subject: Do not queue trivial buffer for unsupported screenshot request. When screenshot is not supported, we queue an empty buffer to the requesting producer. Besides returning a useless screenshot, this overwrites the valuable error code, returning ERROR_OK whenever we successfully return the trivial buffer. Instead, refuse to queue the trivial buffer, and return the original error code. This replaces the workaround proposed in I6da5d2fdecdef6c87d4dd7b353e2464678800110 BUG:27505438 Change-Id: I597a9be25071d2a6ddafb7d39cc1b09fb48d5fd0 --- services/surfaceflinger/SurfaceFlinger.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'services/surfaceflinger/SurfaceFlinger.cpp') diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index db03c23b36..3a0e21fb76 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3440,14 +3440,18 @@ status_t SurfaceFlinger::captureScreenImplLocked( } else { ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); result = INVALID_OPERATION; + window->cancelBuffer(window, buffer, syncFd); + buffer = NULL; } // destroy our image eglDestroyImageKHR(mEGLDisplay, image); } else { result = BAD_VALUE; } - // queueBuffer takes ownership of syncFd - result = window->queueBuffer(window, buffer, syncFd); + if (buffer) { + // queueBuffer takes ownership of syncFd + result = window->queueBuffer(window, buffer, syncFd); + } } } else { result = BAD_VALUE; -- cgit v1.2.3-59-g8ed1b