Loading... (original) (raw)
In
I discovered that two stores separated by a call to OrderAccess::storestore were in fact incorrectly reordered by GCC, exposing a race condition and causing crashes in the G1 collector.
The suggested fix is to add a proper "compiler barrier" to the acquire() and release() functions in orderAccess_linux_x86.hpp to ensure that no compiler reordering occurs.
Something along the lines of:
static inline void compiler_barrier() {
__asm__ volatile ("" : : : "memory");
}