diff --git a/drivers/power/battery/battery_charger.c b/drivers/power/battery/battery_charger.c index ba4f74a4ac6..6f3bda6f974 100644 --- a/drivers/power/battery/battery_charger.c +++ b/drivers/power/battery/battery_charger.c @@ -474,18 +474,18 @@ int battery_charger_changed(FAR struct battery_charger_dev_s *dev, /* Event happen too early? */ + ret = nxmutex_lock(&dev->batlock); + if (ret < 0) + { + return ret; + } + if (list_is_clear(&dev->flist)) { /* Yes, record it and return directly */ dev->mask |= mask; - return 0; - } - - ret = nxmutex_lock(&dev->batlock); - if (ret < 0) - { - return ret; + goto out; } dev->mask |= mask; @@ -495,6 +495,7 @@ int battery_charger_changed(FAR struct battery_charger_dev_s *dev, battery_charger_notify(priv, mask); } +out: nxmutex_unlock(&dev->batlock); return OK; } diff --git a/drivers/power/battery/battery_gauge.c b/drivers/power/battery/battery_gauge.c index 3b52b5d827f..3363ca694f1 100644 --- a/drivers/power/battery/battery_gauge.c +++ b/drivers/power/battery/battery_gauge.c @@ -434,18 +434,18 @@ int battery_gauge_changed(FAR struct battery_gauge_dev_s *dev, /* Event happen too early? */ + ret = nxmutex_lock(&dev->batlock); + if (ret < 0) + { + return ret; + } + if (list_is_clear(&dev->flist)) { /* Yes, record it and return directly */ dev->mask |= mask; - return 0; - } - - ret = nxmutex_lock(&dev->batlock); - if (ret < 0) - { - return ret; + goto out; } dev->mask |= mask; @@ -455,6 +455,7 @@ int battery_gauge_changed(FAR struct battery_gauge_dev_s *dev, battery_gauge_notify(priv, mask); } +out: nxmutex_unlock(&dev->batlock); return OK; } diff --git a/drivers/power/battery/battery_monitor.c b/drivers/power/battery/battery_monitor.c index e01b6cc0763..825b316b7a4 100644 --- a/drivers/power/battery/battery_monitor.c +++ b/drivers/power/battery/battery_monitor.c @@ -499,18 +499,18 @@ int battery_monitor_changed(FAR struct battery_monitor_dev_s *dev, /* Event happen too early? */ + ret = nxmutex_lock(&dev->batlock); + if (ret < 0) + { + return ret; + } + if (list_is_clear(&dev->flist)) { /* Yes, record it and return directly */ dev->mask |= mask; - return 0; - } - - ret = nxmutex_lock(&dev->batlock); - if (ret < 0) - { - return ret; + goto out; } dev->mask |= mask; @@ -520,6 +520,7 @@ int battery_monitor_changed(FAR struct battery_monitor_dev_s *dev, battery_monitor_notify(priv, mask); } +out: nxmutex_unlock(&dev->batlock); return OK; }