| 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,
|
|
|