AudioTrackThread, AudioRecordThread: enable Java calling
When an AudioTrack or AudioRecord is created by system server,
if restoreTrack_l() or restoreRecord_l() is called from AudioTrackThread
or AudioRecordThread, and that then calls audioserver through binder,
which then calls a Java service, binder recursion may call Java
on the original calling thread.
Test: bluetooth calls don't crash
Bug: 126948865
Bug: 127619936
Change-Id: I41fcb666d07c4ab985f5590e40e0c310709e786d
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 7881bb8..670a200 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -3127,8 +3127,9 @@
// =========================================================================
-AudioTrack::AudioTrackThread::AudioTrackThread(AudioTrack& receiver, bool bCanCallJava)
- : Thread(bCanCallJava), mReceiver(receiver), mPaused(true), mPausedInt(false), mPausedNs(0LL),
+AudioTrack::AudioTrackThread::AudioTrackThread(AudioTrack& receiver, bool bCanCallJava __unused)
+ : Thread(true /* bCanCallJava */) // binder recursion on restoreTrack_l() may call Java.
+ , mReceiver(receiver), mPaused(true), mPausedInt(false), mPausedNs(0LL),
mIgnoreNextPausedInt(false)
{
}