StreamOut: use atomic_sp<> for event callback thread safety

Test: basic audio works
Bug: 177278988
Change-Id: I987b31f470009c50412d8cee09163d093ecdd6f9
This commit is contained in:
Andy Hung
2021-01-14 19:42:25 -08:00
parent 6ee09f0457
commit 30874b7a02
2 changed files with 2 additions and 2 deletions

View File

@@ -698,7 +698,7 @@ Return<Result> StreamOut::setEventCallback(const sp<IStreamOutEventCallback>& ca
// static
int StreamOut::asyncEventCallback(stream_event_callback_type_t event, void* param, void* cookie) {
StreamOut* self = reinterpret_cast<StreamOut*>(cookie);
sp<IStreamOutEventCallback> eventCallback = self->mEventCallback;
sp<IStreamOutEventCallback> eventCallback = self->mEventCallback.load();
if (eventCallback.get() == nullptr) return 0;
ALOGV("%s event %d", __func__, event);
Return<void> result;

View File

@@ -161,7 +161,7 @@ struct StreamOut : public IStreamOut {
const sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
mediautils::atomic_sp<IStreamOutCallback> mCallback; // for non-blocking write and drain
#if MAJOR_VERSION >= 6
sp<IStreamOutEventCallback> mEventCallback;
mediautils::atomic_sp<IStreamOutEventCallback> mEventCallback;
#endif
std::unique_ptr<CommandMQ> mCommandMQ;
std::unique_ptr<DataMQ> mDataMQ;