Fix atomic_fetch_xor_release.
commitabff18c0c6055ca5d1cd46923fd1205c057139a5
authorCarlos O'Donell <carlos@systemhalted.org>
Wed, 26 Oct 2016 04:00:13 +0000 (26 00:00 -0400)
committerCarlos O'Donell <carlos@systemhalted.org>
Wed, 26 Oct 2016 04:00:13 +0000 (26 00:00 -0400)
treeac538e66a01817613655e12cd17222e67b24e3ed
parentcd74aa4d5ccae1ae9d815ae7088f06d6fc4aaffc
Fix atomic_fetch_xor_release.

No code uses atomic_fetch_xor_release except for the upcoming
conditional variable rewrite. Therefore there is no user
visible bug here. The use of atomic_compare_and_exchange_bool_rel
is removed (since it doesn't exist anymore), and is replaced
by atomic_compare_exchange_weak_release.

We use weak_release because it provides better performance in
the loop (the weak semantic) and because the xor is release MO
(the release semantic). We don't reload expected in the loop
because atomic_compare_and_exchange_weak_release does this for
us as part of the CAS failure.

It is otherwise a fairly plain conversion that fixes building
the new condvar for 32-bit x86. Passes all regression tests
for x86.
ChangeLog
include/atomic.h