< prev index next >
src/share/vm/runtime/deoptimization.cpp
Print this page
rev 8961 : [mq]: diff-shenandoah.patch
@@ -933,11 +933,11 @@
for (int i = 0; i < monitors->length(); i++) {
MonitorInfo* mon_info = monitors->at(i);
if (mon_info->eliminated()) {
assert(!mon_info->owner_is_scalar_replaced() || realloc_failures, "reallocation was missed");
if (!mon_info->owner_is_scalar_replaced()) {
- Handle obj = Handle(mon_info->owner());
+ Handle obj = Handle(oopDesc::bs()->resolve_and_maybe_copy_oop(mon_info->owner()));
markOop mark = obj->mark();
if (UseBiasedLocking && mark->has_bias_pattern()) {
// New allocated objects may have the mark set to anonymously biased.
// Also the deoptimized method may called methods with synchronization
// where the thread-local object is bias locked to the current thread.
@@ -1056,11 +1056,11 @@
MonitorChunk* monitors = array->element(i)->monitors();
if (monitors != NULL) {
for (int j = 0; j < monitors->number_of_monitors(); j++) {
BasicObjectLock* src = monitors->at(j);
if (src->obj() != NULL) {
- ObjectSynchronizer::fast_exit(src->obj(), src->lock(), thread);
+ ObjectSynchronizer::fast_exit(oopDesc::bs()->resolve_and_maybe_copy_oop(src->obj()), src->lock(), thread);
}
}
array->element(i)->free_monitors(thread);
#ifdef ASSERT
array->element(i)->set_removed_monitors();
< prev index next >