< 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 >