diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2022-02-14 19:21:08 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2022-02-14 19:21:08 +0300 |
commit | e477b79ef4ec0da1e1004da004ffd82bf80a9e24 (patch) | |
tree | adc651552c41f703a7c1f53b104230c9e1f1b3d1 | |
parent | bdea34747d0a49899e034bcbede36afce464a6ab (diff) | |
download | libatomic_ops-e477b79ef4ec0da1e1004da004ffd82bf80a9e24.tar.gz |
Implement AO_stack_init using memset
* src/atomic_ops_stack.c (AO_stack_init): Collapse 2 definitions into
single one; move the definition upper (to be outside of ifdef
USE_ALMOST_LOCK_FREE); implement using memset (instead of initializing
each field to 0).
-rw-r--r-- | src/atomic_ops_stack.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/src/atomic_ops_stack.c b/src/atomic_ops_stack.c index c03be7a..28eba64 100644 --- a/src/atomic_ops_stack.c +++ b/src/atomic_ops_stack.c @@ -26,6 +26,11 @@ #define AO_REQUIRE_CAS #include "atomic_ops_stack.h" +AO_API void AO_stack_init(AO_stack_t *list) +{ + memset((char *)list, 0, sizeof(list)); +} + /* This function call must be a part of a do-while loop with a CAS */ /* designating the condition of the loop (see the use cases below). */ #ifdef AO_THREAD_SANITIZER @@ -215,19 +220,6 @@ return first_ptr; } - AO_API void AO_stack_init(AO_stack_t *list) - { -# if AO_BL_SIZE == 2 - list -> AO_aux.AO_stack_bl[0] = 0; - list -> AO_aux.AO_stack_bl[1] = 0; -# else - int i; - for (i = 0; i < AO_BL_SIZE; ++i) - list -> AO_aux.AO_stack_bl[i] = 0; -# endif - list -> AO_ptr = 0; - } - AO_API void AO_stack_push_release(AO_stack_t *list, AO_t *x) { AO_stack_push_explicit_aux_release(&list->AO_ptr, x, &list->AO_aux); @@ -240,12 +232,6 @@ #else /* ! USE_ALMOST_LOCK_FREE */ - AO_API void AO_stack_init(AO_stack_t *list) - { - list -> AO_val1 = 0; - list -> AO_val2 = 0; - } - /* The functionality is the same as of AO_load_next but the atomicity */ /* is not needed. The usage is similar to that of store_before_cas. */ # if defined(AO_THREAD_SANITIZER) \ |