aaudio: prevent stop/close from a callback
Detect whether AAudioStream_requestStop() is being called
from a data or error callback and return error.
Also for start(), pause(), flush() and close().
Honor AAUDIO_CALLBACK_RESULT_STOP in Legacy callback.
Bug: 65560631
Bug: 62943389
Bug: 63096718
Test: test_various.cpp callback_blocker_none and callback_blocker_lowlat
Change-Id: I29a685cd42910f70d16e23db0f9ec00b72451cfc
diff --git a/media/libaaudio/src/legacy/AudioStreamLegacy.h b/media/libaaudio/src/legacy/AudioStreamLegacy.h
index 7e28579..6a506b3 100644
--- a/media/libaaudio/src/legacy/AudioStreamLegacy.h
+++ b/media/libaaudio/src/legacy/AudioStreamLegacy.h
@@ -112,9 +112,14 @@
void onAudioDeviceUpdate(audio_port_handle_t deviceId);
- void checkForDisconnectRequest();
+ /*
+ * Check to see whether a callback thread has requested a disconnected.
+ * @param errorCallbackEnabled set true to call errorCallback on disconnect
+ * @return AAUDIO_OK or AAUDIO_ERROR_DISCONNECTED
+ */
+ aaudio_result_t checkForDisconnectRequest(bool errorCallbackEnabled);
- void forceDisconnect();
+ void forceDisconnect(bool errorCallbackEnabled = true);
void onStart() { mCallbackEnabled.store(true); }
void onStop() { mCallbackEnabled.store(false); }