Index: media/midi/midi_manager.cc |
diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc |
index 6e8c1a266fa86502407d929db218eb1e85afc1f5..abd91bea7cc9ebc70e62622f8edc6e86524baee4 100644 |
--- a/media/midi/midi_manager.cc |
+++ b/media/midi/midi_manager.cc |
@@ -43,14 +43,14 @@ void ReportUsage(Usage usage) { |
} // namespace |
MidiManager::MidiManager() |
- : initialized_(false), result_(Result::NOT_INITIALIZED) { |
+ : initialized_(false), finalized_(false), result_(Result::NOT_INITIALIZED) { |
ReportUsage(Usage::CREATED); |
} |
MidiManager::~MidiManager() { |
- UMA_HISTOGRAM_ENUMERATION("Media.Midi.ResultOnShutdown", |
- static_cast<Sample>(result_), |
- static_cast<Sample>(Result::MAX) + 1); |
+ // Make sure that Finalize() is called to clean up resources allocated on |
+ // the Chrome_IOThread. |
+ DCHECK(finalized_); |
} |
#if !defined(OS_MACOSX) && !defined(OS_WIN) && \ |
@@ -61,6 +61,20 @@ MidiManager* MidiManager::Create() { |
} |
#endif |
+void MidiManager::Shutdown() { |
+ UMA_HISTOGRAM_ENUMERATION("Media.Midi.ResultOnShutdown", |
+ static_cast<int>(result_), |
+ static_cast<int>(Result::MAX) + 1); |
+ if (session_thread_runner_) { |
yhirano
2015/09/10 07:37:29
We need to protect more code with lock in order to
Takashi Toyoshima
2015/09/10 08:19:15
You are right. I change code to protect session_th
|
+ session_thread_runner_->PostTask( |
+ FROM_HERE, base::Bind(&MidiManager::ShutdownOnSessionThread, |
+ base::Unretained(this))); |
+ } else { |
+ base::AutoLock auto_lock(lock_); |
+ finalized_ = true; |
+ } |
+} |
+ |
void MidiManager::StartSession(MidiManagerClient* client) { |
ReportUsage(Usage::SESSION_STARTED); |
@@ -242,5 +256,11 @@ void MidiManager::AddInitialPorts(MidiManagerClient* client) { |
client->AddOutputPort(info); |
} |
+void MidiManager::ShutdownOnSessionThread() { |
+ Finalize(); |
+ base::AutoLock auto_lock(lock_); |
+ finalized_ = true; |
+} |
+ |
} // namespace midi |
} // namespace media |