| Index: media/midi/midi_manager.cc
|
| diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc
|
| index 95a48401c09781a26f3fceff88153bff45c03b0e..89d640ef320a42c0a67ebbab81d96bb9523d77c2 100644
|
| --- a/media/midi/midi_manager.cc
|
| +++ b/media/midi/midi_manager.cc
|
| @@ -72,15 +72,24 @@ void MidiManager::Shutdown() {
|
| UMA_HISTOGRAM_ENUMERATION("Media.Midi.ResultOnShutdown",
|
| static_cast<int>(result_),
|
| static_cast<int>(Result::MAX) + 1);
|
| - base::AutoLock auto_lock(lock_);
|
| - if (session_thread_runner_) {
|
| - session_thread_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&MidiManager::ShutdownOnSessionThread,
|
| - base::Unretained(this)));
|
| - session_thread_runner_ = nullptr;
|
| - } else {
|
| - finalized_ = true;
|
| + bool shutdown_synchronously = false;
|
| + {
|
| + base::AutoLock auto_lock(lock_);
|
| + if (session_thread_runner_) {
|
| + if (session_thread_runner_->BelongsToCurrentThread()) {
|
| + shutdown_synchronously = true;
|
| + } else {
|
| + session_thread_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&MidiManager::ShutdownOnSessionThread,
|
| + base::Unretained(this)));
|
| + }
|
| + session_thread_runner_ = nullptr;
|
| + } else {
|
| + finalized_ = true;
|
| + }
|
| }
|
| + if (shutdown_synchronously)
|
| + ShutdownOnSessionThread();
|
| }
|
|
|
| void MidiManager::StartSession(MidiManagerClient* client) {
|
|
|