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