libgui: Add null pointer check in setDisplaySurface

Bug 31236602

Change-Id: I78d4e28e40db93f7e7e304355b370af0fa790b9d
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 7ed12b7..b78de2e 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -475,14 +475,16 @@
 
 status_t Composer::setDisplaySurface(const sp<IBinder>& token,
         sp<IGraphicBufferProducer> 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));