diff options
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index c88092b23f..20ba45f96e 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -689,8 +689,20 @@ void Layer::callReleaseBufferCallback(const sp<ITransactionCompletedListener>& l listener->onReleaseBuffer(callbackId, fence, currentMaxAcquiredBufferCount); } - if (mBufferReleaseChannel) { - mBufferReleaseChannel->writeReleaseFence(callbackId, fence, currentMaxAcquiredBufferCount); + if (!mBufferReleaseChannel) { + return; + } + + status_t status = mBufferReleaseChannel->writeReleaseFence(callbackId, fence, + currentMaxAcquiredBufferCount); + if (status != OK) { + int error = -status; + // callReleaseBufferCallback is called during Layer's destructor. In this case, it's + // expected to receive connection errors. + if (error != EPIPE && error != ECONNRESET) { + ALOGD("[%s] writeReleaseFence failed. error %d (%s)", getDebugName(), error, + strerror(error)); + } } } |