From 9b697e87b47beb094d4eb5b7902e5b0b7620c5d6 Mon Sep 17 00:00:00 2001 From: Fabrizio Fabbri Date: Fri, 7 Apr 2017 09:56:04 -0400 Subject: [PATCH] Workaround test_stack failure on AIX/ppc * src/atomic_ops_stack.c [AO_USE_ALMOST_LOCK_FREE] (AO_stack_pop_explicit_aux_acquire): Replace AO_load to AO_load_acquire when loaded value is compared to first; add comment. --- src/atomic_ops_stack.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/atomic_ops_stack.c b/src/atomic_ops_stack.c index adfbcff..e199bff 100644 --- a/src/atomic_ops_stack.c +++ b/src/atomic_ops_stack.c @@ -152,11 +152,14 @@ AO_stack_pop_explicit_aux_acquire(volatile AO_t *list, AO_stack_aux * a) /* list. Otherwise it's possible that a reinsertion of it was */ /* already started before we added the black list entry. */ # if defined(__alpha__) && (__GNUC__ == 4) - if (first != AO_load(list)) + if (first != AO_load_acquire(list)) /* Workaround __builtin_expect bug found in */ /* gcc-4.6.3/alpha causing test_stack failure. */ # else - if (AO_EXPECT_FALSE(first != AO_load(list))) + if (AO_EXPECT_FALSE(first != AO_load_acquire(list))) + /* Workaround test failure on AIX, at least, by */ + /* using acquire ordering semantics for this */ + /* load. Probably, it is not the right fix. */ # endif { AO_store_release(a->AO_stack_bl+i, 0); -- 2.40.0