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

Commit eb46cf92 authored by Andy Hung's avatar Andy Hung
Browse files

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
parent bb08e4d9
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1426,8 +1426,10 @@ void AudioRecord::DeathNotifier::binderDied(const wp<IBinder>& who __unused)

// =========================================================================

AudioRecord::AudioRecordThread::AudioRecordThread(AudioRecord& receiver, bool bCanCallJava)
    : Thread(bCanCallJava), mReceiver(receiver), mPaused(true), mPausedInt(false), mPausedNs(0LL),
AudioRecord::AudioRecordThread::AudioRecordThread(AudioRecord& receiver,
        bool bCanCallJava __unused)
    : Thread(true /* bCanCallJava */)  // binder recursion on restoreRecord_l() may call Java.
    , mReceiver(receiver), mPaused(true), mPausedInt(false), mPausedNs(0LL),
      mIgnoreNextPausedInt(false)
{
}
+3 −2
Original line number Diff line number Diff line
@@ -3127,8 +3127,9 @@ void AudioTrack::DeathNotifier::binderDied(const wp<IBinder>& who __unused)

// =========================================================================

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)
{
}