aaudio: use strong pointer to protect callback
Hold a strong pointer to the AudioStream so it cannot get deleted while
the MMAP callback is running.
Also fixes disconnect for shared streams, which was broken
by a previous attempt to fix b/166877425
Bug: 166877425
Bug: 170551030
Test: see bug for details
Test: atest AAudioTestCases
Test: OboeTester V1.5.30 or later, "TEST DISCONNECT"
Change-Id: I236e2d68632070d253d14ddf7b9d7076e068830a
diff --git a/services/oboeservice/AAudioServiceEndpointCapture.cpp b/services/oboeservice/AAudioServiceEndpointCapture.cpp
index b86fe9d..bc769f0 100644
--- a/services/oboeservice/AAudioServiceEndpointCapture.cpp
+++ b/services/oboeservice/AAudioServiceEndpointCapture.cpp
@@ -65,7 +65,9 @@
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",