From eddbef88cf78deb9b08a6cad2c9cb67e4ddcea0d Mon Sep 17 00:00:00 2001 From: Pablo Ceballos Date: Thu, 1 Sep 2016 11:21:21 -0700 Subject: libgui: Add null pointer check in setDisplaySurface Bug 31236602 Change-Id: I78d4e28e40db93f7e7e304355b370af0fa790b9d --- libs/gui/SurfaceComposerClient.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 7ed12b7bb4..b78de2ea59 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -475,14 +475,16 @@ DisplayState& Composer::getDisplayStateLocked(const sp& token) { status_t Composer::setDisplaySurface(const sp& token, sp bufferProducer) { - // Make sure that composition can never be stalled by a virtual display - // consumer that isn't processing buffers fast enough. - status_t err = bufferProducer->setAsyncMode(true); - if (err != NO_ERROR) { - ALOGE("Composer::setDisplaySurface Failed to enable async mode on the " - "BufferQueue. This BufferQueue cannot be used for virtual " - "display. (%d)", err); - return err; + if (bufferProducer.get() != nullptr) { + // Make sure that composition can never be stalled by a virtual display + // consumer that isn't processing buffers fast enough. + status_t err = bufferProducer->setAsyncMode(true); + if (err != NO_ERROR) { + ALOGE("Composer::setDisplaySurface Failed to enable async mode on the " + "BufferQueue. This BufferQueue cannot be used for virtual " + "display. (%d)", err); + return err; + } } Mutex::Autolock _l(mLock); DisplayState& s(getDisplayStateLocked(token)); -- cgit v1.2.3-59-g8ed1b