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
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index db03c23..3a0e21f 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3440,14 +3440,18 @@
} 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;