From 223f00001b20337f6363f92db3a7b2fb29a6308c Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Tue, 8 Feb 2022 10:13:27 +0300 Subject: Avoid code duplication in AO_stack_push_explicit_aux_release (refactoring) * src/atomic_ops_stack.c [AO_USE_ALMOST_LOCK_FREE && AO_BL_SIZE!=2] (AO_stack_push_explicit_aux_release): Remove code duplicated with AO_BL_SIZE==2 case. --- src/atomic_ops_stack.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/atomic_ops_stack.c b/src/atomic_ops_stack.c index f36c913..c989021 100644 --- a/src/atomic_ops_stack.c +++ b/src/atomic_ops_stack.c @@ -79,12 +79,17 @@ AO_API void AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x, /* No deletions of x can start here, since x is not currently in the */ /* list. */ retry: -# if AO_BL_SIZE == 2 { +# if AO_BL_SIZE == 2 /* Start all loads as close to concurrently as possible. */ AO_t entry1 = AO_load(&a->AO_stack_bl[0]); AO_t entry2 = AO_load(&a->AO_stack_bl[1]); if (entry1 == x_bits || entry2 == x_bits) +# else + int i; + for (i = 0; i < AO_BL_SIZE; ++i) + if (AO_load(&a->AO_stack_bl[i]) == x_bits) +# endif { /* Entry is currently being removed. Change it a little. */ ++x_bits; @@ -95,24 +100,7 @@ AO_API void AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x, goto retry; } } -# else - { - int i; - for (i = 0; i < AO_BL_SIZE; ++i) - { - if (AO_load(&a->AO_stack_bl[i]) == x_bits) - { - /* Entry is currently being removed. Change it a little. */ - ++x_bits; - if ((x_bits & AO_BIT_MASK) == 0) - /* Version count overflowed; */ - /* EXTREMELY unlikely, but possible. */ - x_bits = (AO_t)x; - goto retry; - } - } - } -# endif + /* x_bits is not currently being deleted */ do { -- cgit v1.2.1