| Index: device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
|
| diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
|
| index bb7e6696e7e55bfd7a930321243befbdd1541970..ae2c304d6216a5c7cb74629846bdcb64f9aa1773 100644
|
| --- a/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
|
| +++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_android.cc
|
| @@ -137,7 +137,8 @@ void BluetoothRemoteGattCharacteristicAndroid::StartNotifySession(
|
| const NotifySessionCallback& callback,
|
| const ErrorCallback& error_callback) {
|
| if (!pending_start_notify_calls_.empty()) {
|
| - pending_start_notify_calls_.push(std::make_pair(callback, error_callback));
|
| + pending_start_notify_calls_.push_back(
|
| + std::make_pair(callback, error_callback));
|
| return;
|
| }
|
|
|
| @@ -182,7 +183,8 @@ void BluetoothRemoteGattCharacteristicAndroid::StartNotifySession(
|
| value.push_back(hasNotify ? 1 : 2);
|
| value.push_back(0);
|
|
|
| - pending_start_notify_calls_.push(std::make_pair(callback, error_callback));
|
| + pending_start_notify_calls_.push_back(
|
| + std::make_pair(callback, error_callback));
|
| descriptor->WriteRemoteDescriptor(
|
| value, base::Bind(&BluetoothRemoteGattCharacteristicAndroid::
|
| OnStartNotifySessionSuccess,
|
| @@ -252,21 +254,23 @@ void BluetoothRemoteGattCharacteristicAndroid::OnChanged(
|
| }
|
|
|
| void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionSuccess() {
|
| - while (!pending_start_notify_calls_.empty()) {
|
| - PendingStartNotifyCall callbacks = pending_start_notify_calls_.front();
|
| - pending_start_notify_calls_.pop();
|
| + std::vector<PendingStartNotifyCall> reentrant_safe_callbacks;
|
| + reentrant_safe_callbacks.swap(pending_start_notify_calls_);
|
| +
|
| + for (const auto& callback_pair : reentrant_safe_callbacks) {
|
| scoped_ptr<device::BluetoothGattNotifySession> notify_session(
|
| new BluetoothGattNotifySessionAndroid(instance_id_));
|
| - callbacks.first.Run(std::move(notify_session));
|
| + callback_pair.first.Run(std::move(notify_session));
|
| }
|
| }
|
|
|
| void BluetoothRemoteGattCharacteristicAndroid::OnStartNotifySessionError(
|
| BluetoothGattService::GattErrorCode error) {
|
| - while (!pending_start_notify_calls_.empty()) {
|
| - PendingStartNotifyCall callbacks = pending_start_notify_calls_.front();
|
| - pending_start_notify_calls_.pop();
|
| - callbacks.second.Run(error);
|
| + std::vector<PendingStartNotifyCall> reentrant_safe_callbacks;
|
| + reentrant_safe_callbacks.swap(pending_start_notify_calls_);
|
| +
|
| + for (auto const& callback_pair : reentrant_safe_callbacks) {
|
| + callback_pair.second.Run(error);
|
| }
|
| }
|
|
|
|
|