< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page
rev 59083 : DRAFT 8236522: NonTearable marker interface for inline classes to enforce atomicity


2315 
2316 
2317 // Return a new AssertionStatusDirectives object with the fields filled in with
2318 // command-line assertion arguments (i.e., -ea, -da).
2319 JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused))
2320   JVMWrapper("JVM_AssertionStatusDirectives");
2321   JvmtiVMObjectAllocEventCollector oam;
2322   oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
2323   return JNIHandles::make_local(env, asd);
2324 JVM_END
2325 
2326 // Arrays support /////////////////////////////////////////////////////////////
2327 
2328 JVM_ENTRY(jboolean, JVM_ArrayIsAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2329   JVMWrapper("JVM_ArrayIsAccessAtomic");
2330   oop o = JNIHandles::resolve(array);
2331   Klass* k = o->klass();
2332   if ((o == NULL) || (!k->is_array_klass())) {
2333     THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2334   }
2335   if (k->is_valueArray_klass()) {
2336     return ValueArrayKlass::cast(k)->is_atomic();
2337   }
2338   return true;
2339 JVM_END
2340 
2341 JVM_ENTRY(jobject, JVM_ArrayEnsureAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2342   JVMWrapper("JVM_ArrayEnsureAccessAtomic");
2343   oop o = JNIHandles::resolve(array);
2344   Klass* k = o->klass();
2345   if ((o == NULL) || (!k->is_array_klass())) {
2346     THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2347   }
2348   if (k->is_valueArray_klass()) {
2349     ValueArrayKlass* vk = ValueArrayKlass::cast(k);
2350     if (!vk->is_atomic()) {
2351       /**
2352        * Need to decide how to implement:
2353        *
2354        * 1) Change to objArrayOop layout, therefore oop->klass() differs so
2355        * then "<atomic>[Qfoo;" klass needs to subclass "[Qfoo;" to pass through
2356        * "checkcast" & "instanceof"
2357        *
2358        * 2) Use extra header in the valueArrayOop to flag atomicity required and
2359        * possibly per instance lock structure. Said info, could be placed in
2360        * "trailer" rather than disturb the current arrayOop
2361        */
2362       Unimplemented();
2363     }
2364   }
2365   return array;
2366 JVM_END
2367 
2368 // Verification ////////////////////////////////////////////////////////////////////////////////
2369 
2370 // Reflection for the verifier /////////////////////////////////////////////////////////////////




2315 
2316 
2317 // Return a new AssertionStatusDirectives object with the fields filled in with
2318 // command-line assertion arguments (i.e., -ea, -da).
2319 JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused))
2320   JVMWrapper("JVM_AssertionStatusDirectives");
2321   JvmtiVMObjectAllocEventCollector oam;
2322   oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
2323   return JNIHandles::make_local(env, asd);
2324 JVM_END
2325 
2326 // Arrays support /////////////////////////////////////////////////////////////
2327 
2328 JVM_ENTRY(jboolean, JVM_ArrayIsAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2329   JVMWrapper("JVM_ArrayIsAccessAtomic");
2330   oop o = JNIHandles::resolve(array);
2331   Klass* k = o->klass();
2332   if ((o == NULL) || (!k->is_array_klass())) {
2333     THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2334   }
2335   return ArrayKlass::cast(k)->element_access_is_atomic();



2336 JVM_END
2337 
2338 JVM_ENTRY(jobject, JVM_ArrayEnsureAccessAtomic(JNIEnv *env, jclass unused, jobject array))
2339   JVMWrapper("JVM_ArrayEnsureAccessAtomic");
2340   oop o = JNIHandles::resolve(array);
2341   Klass* k = o->klass();
2342   if ((o == NULL) || (!k->is_array_klass())) {
2343     THROW_0(vmSymbols::java_lang_IllegalArgumentException());
2344   }
2345   if (k->is_valueArray_klass()) {
2346     ValueArrayKlass* vk = ValueArrayKlass::cast(k);
2347     if (!vk->element_access_is_atomic()) {
2348       /**
2349        * Need to decide how to implement:
2350        *
2351        * 1) Change to objArrayOop layout, therefore oop->klass() differs so
2352        * then "<atomic>[Qfoo;" klass needs to subclass "[Qfoo;" to pass through
2353        * "checkcast" & "instanceof"
2354        *
2355        * 2) Use extra header in the valueArrayOop to flag atomicity required and
2356        * possibly per instance lock structure. Said info, could be placed in
2357        * "trailer" rather than disturb the current arrayOop
2358        */
2359       Unimplemented();
2360     }
2361   }
2362   return array;
2363 JVM_END
2364 
2365 // Verification ////////////////////////////////////////////////////////////////////////////////
2366 
2367 // Reflection for the verifier /////////////////////////////////////////////////////////////////


< prev index next >