< prev index next >

src/hotspot/share/runtime/basicLock.cpp

Print this page
rev 56635 : v2.00 -> v2.05 (CR5/v2.05/8-for-jdk13) patches combined into one; merge with 8229212.patch; merge with jdk-14+11; merge with 8230184.patch; merge with 8230876.patch; merge with jdk-14+15; merge with jdk-14+18.

*** 22,31 **** --- 22,32 ---- * */ #include "precompiled.hpp" #include "runtime/basicLock.hpp" + #include "runtime/objectMonitor.hpp" #include "runtime/synchronizer.hpp" void BasicLock::print_on(outputStream* st) const { st->print("monitor"); markWord mark_word = displaced_header();
*** 60,71 **** // we need to ensure that both locations refer to the current thread's stack. // There are some subtle concurrency issues, however, and since the benefit is // is small (given the support for inflated fast-path locking in the fast_lock, etc) // we'll leave that optimization for another time. if (displaced_header().is_neutral()) { ! ObjectSynchronizer::inflate_helper(obj); // WARNING: We can not put check here, because the inflation // will not update the displaced header. Once BasicLock is inflated, // no one should ever look at its content. } else { // Typically the displaced header will be 0 (recursive stack lock) or --- 61,75 ---- // we need to ensure that both locations refer to the current thread's stack. // There are some subtle concurrency issues, however, and since the benefit is // is small (given the support for inflated fast-path locking in the fast_lock, etc) // we'll leave that optimization for another time. + // Disallow async deflation of the inflated monitor so the + // displaced header stays stable until we've copied it. + ObjectMonitorHandle omh; if (displaced_header().is_neutral()) { ! ObjectSynchronizer::inflate_helper(&omh, obj); // WARNING: We can not put check here, because the inflation // will not update the displaced header. Once BasicLock is inflated, // no one should ever look at its content. } else { // Typically the displaced header will be 0 (recursive stack lock) or
< prev index next >