Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffea33ae authored by Yifan Hong's avatar Yifan Hong Committed by android-build-merger
Browse files

health: use recursive_mutex. am: a46c0dae am: 876d782f

am: 1c0e4c6f

Change-Id: I767ed01d871238175a88a61e1e72336a09dbb161
parents 1b7e38bf 1c0e4c6f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ Return<Result> Health::registerCallback(const sp<IHealthInfoCallback>& callback)
    }

    {
        std::lock_guard<std::mutex> _lock(callbacks_lock_);
        std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
        callbacks_.push_back(callback);
        // unlock
    }
@@ -65,7 +65,7 @@ bool Health::unregisterCallbackInternal(const sp<IBase>& callback) {
    if (callback == nullptr) return false;

    bool removed = false;
    std::lock_guard<std::mutex> _lock(callbacks_lock_);
    std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
    for (auto it = callbacks_.begin(); it != callbacks_.end();) {
        if (interfacesEqual(*it, callback)) {
            it = callbacks_.erase(it);
@@ -175,7 +175,7 @@ void Health::notifyListeners(HealthInfo* healthInfo) {
    healthInfo->diskStats = stats;
    healthInfo->storageInfos = info;

    std::lock_guard<std::mutex> _lock(callbacks_lock_);
    std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
    for (auto it = callbacks_.begin(); it != callbacks_.end();) {
        auto ret = (*it)->healthInfoChanged(*healthInfo);
        if (!ret.isOk() && ret.isDeadObject()) {
+1 −3
Original line number Diff line number Diff line
@@ -31,12 +31,10 @@ struct Health : public IHealth, hidl_death_recipient {
    // Should only be called by implementation itself (-impl, -service).
    // Clients should not call this function. Instead, initInstance() initializes and returns the
    // global instance that has fewer functions.
    // TODO(b/62229583): clean up and hide these functions after update() logic is simplified.
    static sp<Health> getImplementation();

    Health(struct healthd_config* c);

    // TODO(b/62229583): clean up and hide these functions after update() logic is simplified.
    void notifyListeners(HealthInfo* info);

    // Methods from IHealth follow.
@@ -61,7 +59,7 @@ struct Health : public IHealth, hidl_death_recipient {
   private:
    static sp<Health> instance_;

    std::mutex callbacks_lock_;
    std::recursive_mutex callbacks_lock_;
    std::vector<sp<IHealthInfoCallback>> callbacks_;
    std::unique_ptr<BatteryMonitor> battery_monitor_;