libuv/src
Andrew Paprocki 4a972bf0e5 aix: Fix broken cmpxchgi() XL C++ specialization.
The preprocessor was used to select a special implementation when
building on AIX using XL C++ (strangely, not XL C).  This code
implemented `cmpxchgi()` by directly reading the old value and then
calling `__compare_and_swap()`, an intrinsic that does not provide
any sort of memory barrier guarantees.  The return value was not
used, and the value read prior to the `__compare_and_swap()` call
was returned.  There is no way that this code could provide the
required semantics of the function and it causes observable data
races and strange library failures in production under load.

XL C/C++ for AIX has provided support for the GCC intrinsic used in
the GCC/Clang cases since version 12.1 of the compiler.  This
version of the compiler is old enough that it doesn't warrant a
version check.  (The compiler was released 8-Jun-2012, maintenance
ended 9-Jul-2019, and service ends 30-Apr-2020.)

This change fixes all observed atomic issues and unifies XL C/C++
with GCC/Clang.

Relevant XL C/C++ for AIX V12.1 documentation links:
  - [__compare_and_swap](https://www.ibm.com/support/knowledgecenter/en/SSGH3R_12.1.0/com.ibm.xlcpp121.aix.doc/compiler_ref/bif_compare_and_swap_compare_and_swaplp.html)
  - [__sync_val_compare_and_swap](https://www.ibm.com/support/knowledgecenter/en/SSGH3R_12.1.0/com.ibm.xlcpp121.aix.doc/compiler_ref/bif_gcc_atomic_val_comp_swap.html)

PR-URL: https://github.com/libuv/libuv/pull/2455
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
2019-09-06 10:17:12 +02:00
..
unix aix: Fix broken cmpxchgi() XL C++ specialization. 2019-09-06 10:17:12 +02:00
win win, tty: improve SIGWINCH performance 2019-09-05 11:36:02 +02:00
fs-poll.c unix,win: fix uv_fs_poll_stop() when active 2019-05-06 15:02:01 +02:00
heap-inl.h
idna.c unix,win: support IDNA 2008 in uv_getaddrinfo() 2018-10-30 20:50:23 +01:00
idna.h unix,win: support IDNA 2008 in uv_getaddrinfo() 2018-10-30 20:50:23 +01:00
inet.c unix: harden string copying, introduce strscpy() 2018-12-04 17:08:09 +01:00
queue.h unix: use QUEUE_MOVE when iterating over lists 2015-10-08 21:47:43 +02:00
strscpy.c unix: harden string copying, introduce strscpy() 2018-12-04 17:08:09 +01:00
strscpy.h unix: harden string copying, introduce strscpy() 2018-12-04 17:08:09 +01:00
threadpool.c threadpool: increase UV_THREADPOOL_SIZE limit 2019-06-07 10:59:44 +02:00
timer.c timer: fix uv_timer_start on closing timer 2019-08-23 20:42:37 +02:00
uv-common.c src: move uv_free_cpu_info to uv-common.c 2019-08-19 23:01:17 +02:00
uv-common.h unix,win: add uv_fs_{open,read,close}dir() 2019-03-26 18:47:51 -04:00
uv-data-getter-setters.c test,sunos: fix statement not reached warnings 2019-03-16 13:22:16 -04:00
version.c core: add UV_VERSION_HEX macro 2015-06-29 23:08:41 +02:00