Index: media/midi/midi_manager_usb.cc |
diff --git a/media/midi/midi_manager_usb.cc b/media/midi/midi_manager_usb.cc |
index e3e74aae386b6f4e26153170f3c3d464c0a4311f..ddd54c214996cb4fdd894ae72cd701e28ba81ced 100644 |
--- a/media/midi/midi_manager_usb.cc |
+++ b/media/midi/midi_manager_usb.cc |
@@ -19,6 +19,8 @@ MidiManagerUsb::MidiManagerUsb(std::unique_ptr<UsbMidiDevice::Factory> factory) |
: device_factory_(std::move(factory)) {} |
MidiManagerUsb::~MidiManagerUsb() { |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ CHECK(!scheduler_); |
} |
void MidiManagerUsb::StartInitialization() { |
@@ -26,9 +28,20 @@ void MidiManagerUsb::StartInitialization() { |
base::Bind(&MidiManager::CompleteInitialization, base::Unretained(this))); |
} |
+void MidiManagerUsb::Finalize() { |
+ // Destruct MidiScheduler on Chrome_IOThread. |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ scheduler_.reset(); |
+} |
+ |
void MidiManagerUsb::Initialize(base::Callback<void(Result result)> callback) { |
initialize_callback_ = callback; |
- scheduler_.reset(new MidiScheduler(this)); |
+ |
+ { |
+ base::AutoLock auto_lock(scheduler_lock_); |
+ scheduler_.reset(new MidiScheduler(this)); |
+ } |
+ |
// This is safe because EnumerateDevices cancels the operation on destruction. |
device_factory_->EnumerateDevices( |
this, |