From 2adec4f116067ea8beac05fc196d173718a62d7d Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Thu, 19 Mar 2020 20:39:12 +0000 Subject: [PATCH] audio: Check result from oneway calls As oneway HIDL calls generate methods that return 'Result', the returned value must be checked to avoid triggering an assertion if the result was an error (e.g. due to the client death). Bug: 151900655 Test: N/A Change-Id: I4721240b5959d6f11cb4447b30928bf4c83da058 --- audio/core/all-versions/default/StreamOut.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/audio/core/all-versions/default/StreamOut.cpp b/audio/core/all-versions/default/StreamOut.cpp index 150d641cd0..1519c48e12 100644 --- a/audio/core/all-versions/default/StreamOut.cpp +++ b/audio/core/all-versions/default/StreamOut.cpp @@ -455,20 +455,22 @@ int StreamOut::asyncCallback(stream_callback_event_t event, void*, void* cookie) sp callback = self->mCallback; if (callback.get() == nullptr) return 0; ALOGV("asyncCallback() event %d", event); + Return result; switch (event) { case STREAM_CBK_EVENT_WRITE_READY: - callback->onWriteReady(); + result = callback->onWriteReady(); break; case STREAM_CBK_EVENT_DRAIN_READY: - callback->onDrainReady(); + result = callback->onDrainReady(); break; case STREAM_CBK_EVENT_ERROR: - callback->onError(); + result = callback->onError(); break; default: ALOGW("asyncCallback() unknown event %d", event); break; } + ALOGW_IF(!result.isOk(), "Client callback failed: %s", result.description().c_str()); return 0; } @@ -629,16 +631,18 @@ int StreamOut::asyncEventCallback(stream_event_callback_type_t event, void* para sp eventCallback = self->mEventCallback; if (eventCallback.get() == nullptr) return 0; ALOGV("%s event %d", __func__, event); + Return result; switch (event) { case STREAM_EVENT_CBK_TYPE_CODEC_FORMAT_CHANGED: { hidl_vec audioMetadata; audioMetadata.setToExternal((uint8_t*)param, strlen((char*)param)); - eventCallback->onCodecFormatChanged(audioMetadata); + result = eventCallback->onCodecFormatChanged(audioMetadata); } break; default: ALOGW("%s unknown event %d", __func__, event); break; } + ALOGW_IF(!result.isOk(), "Client callback failed: %s", result.description().c_str()); return 0; } #endif