The release_store_thread function
inline static void release_store_thread(volatile pthread_t* dest,
pthread_t val) {
READ_MEM_BARRIER;
*dest = val;
WRITE_MEM_BARRIER;
}
does not provide release semantics. When this is inlined into jvmObjectMonitorExitEpilog, it permits the store to omonitor->_succ to be visible after the store to omonitor->_owner, which violates what is expected in the JVM code.