| Index: media/midi/midi_manager.cc
|
| diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc
|
| index 95a48401c09781a26f3fceff88153bff45c03b0e..7669a15b18054b7117677ed378f1525d4624b1d2 100644
|
| --- a/media/midi/midi_manager.cc
|
| +++ b/media/midi/midi_manager.cc
|
| @@ -46,10 +46,11 @@ void ReportUsage(Usage usage) {
|
|
|
| } // namespace
|
|
|
| -MidiManager::MidiManager()
|
| +MidiManager::MidiManager(MidiService* service)
|
| : initialization_state_(InitializationState::NOT_STARTED),
|
| finalized_(false),
|
| - result_(Result::NOT_INITIALIZED) {
|
| + result_(Result::NOT_INITIALIZED),
|
| + service_(service) {
|
| ReportUsage(Usage::CREATED);
|
| }
|
|
|
| @@ -62,7 +63,7 @@ MidiManager::~MidiManager() {
|
|
|
| #if !defined(OS_MACOSX) && !defined(OS_WIN) && \
|
| !(defined(USE_ALSA) && defined(USE_UDEV)) && !defined(OS_ANDROID)
|
| -MidiManager* MidiManager::Create() {
|
| +MidiManager* MidiManager::Create(MidiService* service) {
|
| ReportUsage(Usage::CREATED_ON_UNSUPPORTED_PLATFORMS);
|
| return new MidiManager;
|
| }
|
| @@ -72,15 +73,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) {
|
|
|