Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30874b7a authored by Andy Hung's avatar Andy Hung
Browse files

StreamOut: use atomic_sp<> for event callback thread safety

Test: basic audio works
Bug: 177278988
Change-Id: I987b31f470009c50412d8cee09163d093ecdd6f9
parent 6ee09f04
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -698,7 +698,7 @@ Return<Result> StreamOut::setEventCallback(const sp<IStreamOutEventCallback>& ca
// static
// static
int StreamOut::asyncEventCallback(stream_event_callback_type_t event, void* param, void* cookie) {
int StreamOut::asyncEventCallback(stream_event_callback_type_t event, void* param, void* cookie) {
    StreamOut* self = reinterpret_cast<StreamOut*>(cookie);
    StreamOut* self = reinterpret_cast<StreamOut*>(cookie);
    sp<IStreamOutEventCallback> eventCallback = self->mEventCallback;
    sp<IStreamOutEventCallback> eventCallback = self->mEventCallback.load();
    if (eventCallback.get() == nullptr) return 0;
    if (eventCallback.get() == nullptr) return 0;
    ALOGV("%s event %d", __func__, event);
    ALOGV("%s event %d", __func__, event);
    Return<void> result;
    Return<void> result;
+1 −1
Original line number Original line Diff line number Diff line
@@ -161,7 +161,7 @@ struct StreamOut : public IStreamOut {
    const sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
    const sp<StreamMmap<audio_stream_out_t>> mStreamMmap;
    mediautils::atomic_sp<IStreamOutCallback> mCallback;  // for non-blocking write and drain
    mediautils::atomic_sp<IStreamOutCallback> mCallback;  // for non-blocking write and drain
#if MAJOR_VERSION >= 6
#if MAJOR_VERSION >= 6
    sp<IStreamOutEventCallback> mEventCallback;
    mediautils::atomic_sp<IStreamOutEventCallback> mEventCallback;
#endif
#endif
    std::unique_ptr<CommandMQ> mCommandMQ;
    std::unique_ptr<CommandMQ> mCommandMQ;
    std::unique_ptr<DataMQ> mDataMQ;
    std::unique_ptr<DataMQ> mDataMQ;