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

Commit fff9c8aa authored by Phil Burk's avatar Phil Burk Committed by Android (Google) Code Review
Browse files

Merge "aaudio: use strong pointer to protect callback" into rvc-qpr-dev

parents 75f20e19 f2d8470b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -404,7 +404,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
@@ -69,7 +69,9 @@ void *AAudioServiceEndpointCapture::callbackLoop() {
        // Read audio data from stream using a blocking read.
        result = getStreamInternal()->read(mDistributionBuffer, 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",