Use memory_order_acq_rel in isc_refcount_decrement.
requested to merge 2096-isc_refcount_decrement-needs-acquire-release-memory-ordering-v9_16 into v9_16
While
if (isc_refcount_decrement() == 1) { // memory_order_release
isc_refcount_destroy(); // memory_order_acquire
...
}
is theoretically the most efficent in practice, using memory_order_acq_rel produces the same code on x86_64 and doesn't trigger tsan data races (which use a idealistic model) if isc_refcount_destroy() is not called immediately. In fact isc_refcount_destroy() could be removed if we didn't want to check for the count being 0 when isc_refcount_destroy() is called.
https://stackoverflow.com/questions/49112732/memory-order-in-shared-pointer-destructor (cherry picked from commit 6278899a)
Closes #2096 (closed)
Edited by Mark Andrews