< prev index next >

src/hotspot/share/runtime/jniHandles.inline.hpp

Print this page
rev 50534 : [mq]: rename_RootAccess


  40 inline oop* JNIHandles::jobject_ptr(jobject handle) {
  41   assert(!is_jweak(handle), "precondition");
  42   return reinterpret_cast<oop*>(handle);
  43 }
  44 
  45 inline oop* JNIHandles::jweak_ptr(jobject handle) {
  46   assert(is_jweak(handle), "precondition");
  47   char* ptr = reinterpret_cast<char*>(handle) - weak_tag_value;
  48   return reinterpret_cast<oop*>(ptr);
  49 }
  50 
  51 // external_guard is true if called from resolve_external_guard.
  52 template<bool external_guard>
  53 inline oop JNIHandles::resolve_impl(jobject handle) {
  54   assert(handle != NULL, "precondition");
  55   assert(!current_thread_in_native(), "must not be in native");
  56   oop result;
  57   if (is_jweak(handle)) {       // Unlikely
  58     result = resolve_jweak(handle);
  59   } else {
  60     result = RootAccess<IN_CONCURRENT_ROOT>::oop_load(jobject_ptr(handle));
  61     // Construction of jobjects canonicalize a null value into a null
  62     // jobject, so for non-jweak the pointee should never be null.
  63     assert(external_guard || result != NULL, "Invalid JNI handle");
  64   }
  65   return result;
  66 }
  67 
  68 inline oop JNIHandles::resolve(jobject handle) {
  69   oop result = NULL;
  70   if (handle != NULL) {
  71     result = resolve_impl<false /* external_guard */ >(handle);
  72   }
  73   return result;
  74 }
  75 
  76 inline oop JNIHandles::resolve_non_null(jobject handle) {
  77   assert(handle != NULL, "JNI handle should not be null");
  78   oop result = resolve_impl<false /* external_guard */ >(handle);
  79   assert(result != NULL, "NULL read from jni handle");
  80   return result;
  81 }
  82 
  83 inline void JNIHandles::destroy_local(jobject handle) {
  84   if (handle != NULL) {
  85     assert(!is_jweak(handle), "Invalid JNI local handle");
  86     RootAccess<>::oop_store(jobject_ptr(handle), (oop)NULL);
  87   }
  88 }
  89 
  90 #endif // SHARE_RUNTIME_JNIHANDLES_INLINE_HPP
  91 


  40 inline oop* JNIHandles::jobject_ptr(jobject handle) {
  41   assert(!is_jweak(handle), "precondition");
  42   return reinterpret_cast<oop*>(handle);
  43 }
  44 
  45 inline oop* JNIHandles::jweak_ptr(jobject handle) {
  46   assert(is_jweak(handle), "precondition");
  47   char* ptr = reinterpret_cast<char*>(handle) - weak_tag_value;
  48   return reinterpret_cast<oop*>(ptr);
  49 }
  50 
  51 // external_guard is true if called from resolve_external_guard.
  52 template<bool external_guard>
  53 inline oop JNIHandles::resolve_impl(jobject handle) {
  54   assert(handle != NULL, "precondition");
  55   assert(!current_thread_in_native(), "must not be in native");
  56   oop result;
  57   if (is_jweak(handle)) {       // Unlikely
  58     result = resolve_jweak(handle);
  59   } else {
  60     result = NativeAccess<IN_CONCURRENT_ROOT>::oop_load(jobject_ptr(handle));
  61     // Construction of jobjects canonicalize a null value into a null
  62     // jobject, so for non-jweak the pointee should never be null.
  63     assert(external_guard || result != NULL, "Invalid JNI handle");
  64   }
  65   return result;
  66 }
  67 
  68 inline oop JNIHandles::resolve(jobject handle) {
  69   oop result = NULL;
  70   if (handle != NULL) {
  71     result = resolve_impl<false /* external_guard */ >(handle);
  72   }
  73   return result;
  74 }
  75 
  76 inline oop JNIHandles::resolve_non_null(jobject handle) {
  77   assert(handle != NULL, "JNI handle should not be null");
  78   oop result = resolve_impl<false /* external_guard */ >(handle);
  79   assert(result != NULL, "NULL read from jni handle");
  80   return result;
  81 }
  82 
  83 inline void JNIHandles::destroy_local(jobject handle) {
  84   if (handle != NULL) {
  85     assert(!is_jweak(handle), "Invalid JNI local handle");
  86     NativeAccess<>::oop_store(jobject_ptr(handle), (oop)NULL);
  87   }
  88 }
  89 
  90 #endif // SHARE_RUNTIME_JNIHANDLES_INLINE_HPP
  91 
< prev index next >