This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit f36eb4ea7ef452a40aa287fd819cb8bab79bf876
Author: Christopher Collins <ccoll...@apache.org>
AuthorDate: Thu Nov 1 14:35:30 2018 -0700

    hw/battery: Lock mutex in `battery_init()`
    
    Prevent race condition when two tasks call `battery_init()`.
---
 hw/battery/src/battery.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/hw/battery/src/battery.c b/hw/battery/src/battery.c
index 4e09570..c8d4fc0 100644
--- a/hw/battery/src/battery.c
+++ b/hw/battery/src/battery.c
@@ -791,11 +791,14 @@ battery_init(struct os_dev *dev, void *arg)
 
     OS_DEV_SETHANDLERS(dev, battery_open, battery_close);
 
+    os_mutex_pend(&battery_manager.bm_lock, OS_WAIT_FOREVER);
     for (i = 0; i < BATTERY_MAX_COUNT; ++i) {
         if (battery_manager.bm_batteries[i] == NULL) {
             break;
         }
     }
+    os_mutex_release(&battery_manager.bm_lock);
+
     assert(i < BATTERY_MAX_COUNT);
     battery_manager.bm_batteries[i] = bat;
 

Reply via email to