summaryrefslogtreecommitdiff
path: root/lib/bt/esp_ble_mesh/common/atomic.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bt/esp_ble_mesh/common/atomic.c')
-rw-r--r--lib/bt/esp_ble_mesh/common/atomic.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/bt/esp_ble_mesh/common/atomic.c b/lib/bt/esp_ble_mesh/common/atomic.c
index 723ce7e3..9c856cc3 100644
--- a/lib/bt/esp_ble_mesh/common/atomic.c
+++ b/lib/bt/esp_ble_mesh/common/atomic.c
@@ -13,7 +13,7 @@
/*
* SPDX-FileCopyrightText: 2016 Intel Corporation
* SPDX-FileCopyrightText: 2011-2014 Wind River Systems, Inc.
- * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD
+ * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -170,4 +170,18 @@ bt_mesh_atomic_val_t bt_mesh_atomic_inc(bt_mesh_atomic_t *target)
return ret;
}
+bool bt_mesh_atomic_cas(bt_mesh_atomic_t *target, bt_mesh_atomic_val_t excepted, bt_mesh_atomic_val_t new_val)
+{
+ bt_mesh_atomic_lock();
+
+ if (*target == excepted) {
+ *target = new_val;
+ bt_mesh_atomic_unlock();
+ return true;
+ }
+
+ bt_mesh_atomic_unlock();
+ return false;
+}
+
#endif /* #ifndef CONFIG_ATOMIC_OPERATIONS_BUILTIN */