Loading healthd/BatteryPropertiesRegistrar.cpp +13 −3 Original line number Diff line number Diff line Loading @@ -36,9 +36,19 @@ void BatteryPropertiesRegistrar::publish( } void BatteryPropertiesRegistrar::notifyListeners(const struct BatteryProperties& props) { Vector<sp<IBatteryPropertiesListener> > listenersCopy; // Binder currently may service an incoming oneway transaction whenever an // outbound oneway call is made (if there is already a pending incoming // oneway call waiting). This is considered a bug and may change in the // future. For now, avoid recursive mutex lock while making outbound // calls by making a local copy of the current list of listeners. { Mutex::Autolock _l(mRegistrationLock); for (size_t i = 0; i < mListeners.size(); i++) { mListeners[i]->batteryPropertiesChanged(props); listenersCopy = mListeners; } for (size_t i = 0; i < listenersCopy.size(); i++) { listenersCopy[i]->batteryPropertiesChanged(props); } } Loading Loading
healthd/BatteryPropertiesRegistrar.cpp +13 −3 Original line number Diff line number Diff line Loading @@ -36,9 +36,19 @@ void BatteryPropertiesRegistrar::publish( } void BatteryPropertiesRegistrar::notifyListeners(const struct BatteryProperties& props) { Vector<sp<IBatteryPropertiesListener> > listenersCopy; // Binder currently may service an incoming oneway transaction whenever an // outbound oneway call is made (if there is already a pending incoming // oneway call waiting). This is considered a bug and may change in the // future. For now, avoid recursive mutex lock while making outbound // calls by making a local copy of the current list of listeners. { Mutex::Autolock _l(mRegistrationLock); for (size_t i = 0; i < mListeners.size(); i++) { mListeners[i]->batteryPropertiesChanged(props); listenersCopy = mListeners; } for (size_t i = 0; i < listenersCopy.size(); i++) { listenersCopy[i]->batteryPropertiesChanged(props); } } Loading