< prev index next >

src/share/vm/prims/jvm.cpp

Print this page

        

@@ -549,17 +549,19 @@
 
 
 JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))
   JVMWrapper("JVM_IHashCode");
   // as implemented in the classic virtual machine; return 0 if object is NULL
-  return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;
+  return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve_non_null(handle))) ;
 JVM_END
 
 
 JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms))
   JVMWrapper("JVM_MonitorWait");
-  Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
+  oop o = JNIHandles::resolve_non_null(handle);
+  o = oopDesc::bs()->write_barrier(o);
+  Handle obj(THREAD, o);
   JavaThreadInObjectWaitState jtiows(thread, ms != 0);
   if (JvmtiExport::should_post_monitor_wait()) {
     JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
 
     // The current thread already owns the monitor and it has not yet

@@ -572,25 +574,25 @@
 JVM_END
 
 
 JVM_ENTRY(void, JVM_MonitorNotify(JNIEnv* env, jobject handle))
   JVMWrapper("JVM_MonitorNotify");
-  Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
+  Handle obj(THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve_non_null(handle)));
   ObjectSynchronizer::notify(obj, CHECK);
 JVM_END
 
 
 JVM_ENTRY(void, JVM_MonitorNotifyAll(JNIEnv* env, jobject handle))
   JVMWrapper("JVM_MonitorNotifyAll");
-  Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
+  Handle obj(THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve_non_null(handle)));
   ObjectSynchronizer::notifyall(obj, CHECK);
 JVM_END
 
 
 JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle))
   JVMWrapper("JVM_Clone");
-  Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
+  Handle obj(THREAD, oopDesc::bs()->read_barrier(JNIHandles::resolve_non_null(handle)));
   const KlassHandle klass (THREAD, obj->klass());
   JvmtiVMObjectAllocEventCollector oam;
 
 #ifdef ASSERT
   // Just checking that the cloneable flag is set correct

@@ -627,10 +629,11 @@
   // 4846409: an oop-copy of objects with long or double fields or arrays of same
   // won't copy the longs/doubles atomically in 32-bit vm's, so we copy jlongs instead
   // of oops.  We know objects are aligned on a minimum of an jlong boundary.
   // The same is true of StubRoutines::object_copy and the various oop_copy
   // variants, and of the code generated by the inline_native_clone intrinsic.
+  assert(new_obj_oop == oopDesc::bs()->read_barrier(new_obj_oop), "expect to-space copy");
   assert(MinObjAlignmentInBytes >= BytesPerLong, "objects misaligned");
   Copy::conjoint_jlongs_atomic((jlong*)obj(), (jlong*)new_obj_oop,
                                (size_t)align_object_size(size) / HeapWordsPerLong);
   // Clear the header
   new_obj_oop->init_mark();

@@ -893,11 +896,11 @@
     class_name = SymbolTable::new_symbol(name, str_len, CHECK_NULL);
   }
 
   ResourceMark rm(THREAD);
   ClassFileStream st((u1*) buf, len, (char *)source);
-  Handle class_loader (THREAD, JNIHandles::resolve(loader));
+  Handle class_loader (THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve(loader)));
   if (UsePerfData) {
     is_lock_held_by_thread(class_loader,
                            ClassLoader::sync_JVMDefineClassLockFreeCounter(),
                            THREAD);
   }

@@ -957,11 +960,11 @@
   TempNewSymbol klass_name = SymbolTable::new_symbol(str, str_len, CHECK_NULL);
 
   // Security Note:
   //   The Java level wrapper will perform the necessary security check allowing
   //   us to pass the NULL as the initiating class loader.
-  Handle h_loader(THREAD, JNIHandles::resolve(loader));
+  Handle h_loader(THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve(loader)));
   if (UsePerfData) {
     is_lock_held_by_thread(h_loader,
                            ClassLoader::sync_JVMFindLoadedClassLockFreeCounter(),
                            THREAD);
   }

@@ -3026,11 +3029,11 @@
   JVMWrapper("JVM_HoldsLock");
   assert(THREAD->is_Java_thread(), "sanity check");
   if (obj == NULL) {
     THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
   }
-  Handle h_obj(THREAD, JNIHandles::resolve(obj));
+  Handle h_obj(THREAD, oopDesc::bs()->write_barrier(JNIHandles::resolve(obj)));
   return ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, h_obj);
 JVM_END
 
 
 JVM_ENTRY(void, JVM_DumpAllStacks(JNIEnv* env, jclass))
< prev index next >