Free data queue before closing data file descriptor.
When data file descriptor is closed, the raw pointer mapped from the
file descriptor is invalidated. In that case, the data queue should be
freed so that it won't access the invalid address.
Bug: 314872581
Test: manually
Change-Id: Ida375e14cc3f9d85d434e45e539c8cff3125f992
diff --git a/media/libaaudio/src/client/AudioStreamInternal.cpp b/media/libaaudio/src/client/AudioStreamInternal.cpp
index f431da8..52925d9 100644
--- a/media/libaaudio/src/client/AudioStreamInternal.cpp
+++ b/media/libaaudio/src/client/AudioStreamInternal.cpp
@@ -399,6 +399,12 @@
uint8_t buffer[getDeviceBufferCapacity() * getBytesPerFrame()];
android::fifo_frames_t fullFramesAvailable = mAudioEndpoint->read(buffer,
getDeviceBufferCapacity());
+ // Before releasing the data queue, update the frames read and written.
+ getFramesRead();
+ getFramesWritten();
+ // Call freeDataQueue() here because the following call to
+ // closeDataFileDescriptor() will invalidate the pointers used by the data queue.
+ mAudioEndpoint->freeDataQueue();
mEndPointParcelable.closeDataFileDescriptor();
aaudio_result_t result = mServiceInterface.exitStandby(
mServiceStreamHandleInfo, endpointParcelable);