Index: media/midi/midi_manager_android.cc |
diff --git a/media/midi/midi_manager_android.cc b/media/midi/midi_manager_android.cc |
index 54fe91514c903f3f1189be369fa316f017589d3f..25966260b01fd2ec0b16f7691bf89006dbf74ac2 100644 |
--- a/media/midi/midi_manager_android.cc |
+++ b/media/midi/midi_manager_android.cc |
@@ -35,7 +35,10 @@ MidiManager* MidiManager::Create() { |
MidiManagerAndroid::MidiManagerAndroid() {} |
-MidiManagerAndroid::~MidiManagerAndroid() {} |
+MidiManagerAndroid::~MidiManagerAndroid() { |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ CHECK(!scheduler_); |
+} |
void MidiManagerAndroid::StartInitialization() { |
JNIEnv* env = base::android::AttachCurrentThread(); |
@@ -43,10 +46,21 @@ void MidiManagerAndroid::StartInitialization() { |
uintptr_t pointer = reinterpret_cast<uintptr_t>(this); |
raw_manager_.Reset(Java_MidiManagerAndroid_create( |
env, base::android::GetApplicationContext(), pointer)); |
- scheduler_.reset(new MidiScheduler(this)); |
+ |
+ { |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ scheduler_.reset(new MidiScheduler(this)); |
+ } |
+ |
Java_MidiManagerAndroid_initialize(env, raw_manager_); |
} |
+void MidiManagerAndroid::Finalize() { |
+ // Destruct MidiScheduler on Chrome_IOThread. |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ scheduler_.reset(); |
+} |
+ |
void MidiManagerAndroid::DispatchSendMidiData(MidiManagerClient* client, |
uint32_t port_index, |
const std::vector<uint8_t>& data, |