Index: media/audio/android/audio_manager_android.cc |
diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc |
index 35534b3cf022de233ed9c50452a6003e4870fbd8..96a7c78c29c055d099f5ee985a8a591bfe44c3a8 100644 |
--- a/media/audio/android/audio_manager_android.cc |
+++ b/media/audio/android/audio_manager_android.cc |
@@ -45,22 +45,12 @@ |
} // namespace |
-ScopedAudioManagerPtr CreateAudioManager( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, |
- AudioLogFactory* audio_log_factory) { |
- return ScopedAudioManagerPtr(new AudioManagerAndroid( |
- std::move(task_runner), std::move(worker_task_runner), |
- audio_log_factory)); |
-} |
- |
-AudioManagerAndroid::AudioManagerAndroid( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, |
- AudioLogFactory* audio_log_factory) |
- : AudioManagerBase(std::move(task_runner), |
- std::move(worker_task_runner), |
- audio_log_factory), |
+AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) { |
+ return new AudioManagerAndroid(audio_log_factory); |
+} |
+ |
+AudioManagerAndroid::AudioManagerAndroid(AudioLogFactory* audio_log_factory) |
+ : AudioManagerBase(audio_log_factory), |
communication_mode_is_on_(false), |
output_volume_override_set_(false), |
output_volume_override_(0) { |
@@ -78,13 +68,11 @@ |
} |
AudioManagerAndroid::~AudioManagerAndroid() { |
- DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
+ // It's safe to post a task here since Shutdown() will wait for all tasks to |
+ // complete before returning. |
+ GetTaskRunner()->PostTask(FROM_HERE, base::Bind( |
+ &AudioManagerAndroid::ShutdownOnAudioThread, base::Unretained(this))); |
Shutdown(); |
- |
- DVLOG(2) << "Destroying Java part of the audio manager"; |
- Java_AudioManagerAndroid_close(base::android::AttachCurrentThread(), |
- j_audio_manager_.obj()); |
- j_audio_manager_.Reset(); |
} |
bool AudioManagerAndroid::HasAudioOutputDevices() { |
@@ -349,6 +337,15 @@ |
j_audio_manager_.obj()); |
} |
+void AudioManagerAndroid::ShutdownOnAudioThread() { |
+ DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
+ DVLOG(2) << "Destroying Java part of the audio manager"; |
+ Java_AudioManagerAndroid_close( |
+ base::android::AttachCurrentThread(), |
+ j_audio_manager_.obj()); |
+ j_audio_manager_.Reset(); |
+} |
+ |
void AudioManagerAndroid::SetCommunicationAudioModeOn(bool on) { |
Java_AudioManagerAndroid_setCommunicationAudioModeOn( |
base::android::AttachCurrentThread(), |