From 245cc5b57da46d5852aa820be2a96f37425b3337 Mon Sep 17 00:00:00 2001 From: Pablo Ceballos Date: Tue, 19 Apr 2016 11:33:00 -0700 Subject: BQ: Avoid unnecessary calls to consumer listener Try to avoid unnecessary calls to the consumer listener's onBuffersReleased() since they can potentially deadlock. Bug 28254168 Change-Id: Ib064e5ebe1403a1028589342b3c33e6f40bb54a9 --- libs/gui/BufferQueueProducer.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'libs/gui/BufferQueueProducer.cpp') diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index bb8d39b760..91ba18db7f 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -101,6 +101,10 @@ status_t BufferQueueProducer::setMaxDequeuedBufferCount( return NO_INIT; } + if (maxDequeuedBuffers == mCore->mMaxDequeuedBufferCount) { + return NO_ERROR; + } + // The new maxDequeuedBuffer count should not be violated by the number // of currently dequeued buffers int dequeuedCount = 0; @@ -175,6 +179,10 @@ status_t BufferQueueProducer::setAsyncMode(bool async) { return NO_INIT; } + if (async == mCore->mAsyncMode) { + return NO_ERROR; + } + if ((mCore->mMaxAcquiredBufferCount + mCore->mMaxDequeuedBufferCount + (async || mCore->mDequeueBufferCannotBlock ? 1 : 0)) > mCore->mMaxBufferCount) { @@ -199,7 +207,9 @@ status_t BufferQueueProducer::setAsyncMode(bool async) { mCore->mAsyncMode = async; VALIDATE_CONSISTENCY(); mCore->mDequeueCondition.broadcast(); - listener = mCore->mConsumerListener; + if (delta < 0) { + listener = mCore->mConsumerListener; + } } // Autolock scope // Call back without lock held -- cgit v1.2.3-59-g8ed1b