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

Commit 14a1a173 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "aaudio: use strong pointer to protect callback"

parents 2254ae51 e358ec63
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -407,7 +407,9 @@ void* AudioStream::wrapUserThread() {
// It converts the 'C' function call to a C++ method call.
static void* AudioStream_internalThreadProc(void* threadArg) {
    AudioStream *audioStream = (AudioStream *) threadArg;
    return audioStream->wrapUserThread();
    // Use an sp<> to prevent the stream from being deleted while running.
    android::sp<AudioStream> protectedStream(audioStream);
    return protectedStream->wrapUserThread();
}

// This is not exposed in the API.
+3 −1
Original line number Diff line number Diff line
@@ -65,7 +65,9 @@ void *AAudioServiceEndpointCapture::callbackLoop() {
        result = getStreamInternal()->read(mDistributionBuffer.get(),
                getFramesPerBurst(), timeoutNanos);
        if (result == AAUDIO_ERROR_DISCONNECTED) {
            ALOGV("%s() read() returned AAUDIO_ERROR_DISCONNECTED, break", __func__);
            ALOGD("%s() read() returned AAUDIO_ERROR_DISCONNECTED", __func__);
            // We do not need the returned vector.
            (void) AAudioServiceEndpointShared::disconnectRegisteredStreams();
            break;
        } else if (result != getFramesPerBurst()) {
            ALOGW("callbackLoop() read %d / %d",
+3 −1
Original line number Diff line number Diff line
@@ -145,7 +145,9 @@ void *AAudioServiceEndpointPlay::callbackLoop() {
        result = getStreamInternal()->write(mMixer.getOutputBuffer(),
                                            getFramesPerBurst(), timeoutNanos);
        if (result == AAUDIO_ERROR_DISCONNECTED) {
            ALOGV("%s() write() returned AAUDIO_ERROR_DISCONNECTED, break", __func__);
            ALOGD("%s() write() returned AAUDIO_ERROR_DISCONNECTED", __func__);
            // We do not need the returned vector.
            (void) AAudioServiceEndpointShared::disconnectRegisteredStreams();
            break;
        } else if (result != getFramesPerBurst()) {
            ALOGW("callbackLoop() wrote %d / %d",