663 // Clear the header
664 new_obj_oop->init_mark();
665
666 // Store check (mark entire object and let gc sort it out)
667 BarrierSet* bs = Universe::heap()->barrier_set();
668 assert(bs->has_write_region_opt(), "Barrier set does not have write_region");
669 bs->write_region(MemRegion((HeapWord*)new_obj_oop, size));
670
671 Handle new_obj(THREAD, new_obj_oop);
672 // Special handling for MemberNames. Since they contain Method* metadata, they
673 // must be registered so that RedefineClasses can fix metadata contained in them.
674 if (java_lang_invoke_MemberName::is_instance(new_obj()) &&
675 java_lang_invoke_MemberName::is_method(new_obj())) {
676 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(new_obj());
677 // MemberName may be unresolved, so doesn't need registration until resolved.
678 if (method != NULL) {
679 methodHandle m(THREAD, method);
680 // This can safepoint and redefine method, so need both new_obj and method
681 // in a handle, for two different reasons. new_obj can move, method can be
682 // deleted if nothing is using it on the stack.
683 m->method_holder()->add_member_name(new_obj(), false);
684 }
685 }
686
687 // Caution: this involves a java upcall, so the clone should be
688 // "gc-robust" by this stage.
689 if (klass->has_finalizer()) {
690 assert(obj->is_instance(), "should be instanceOop");
691 new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL);
692 new_obj = Handle(THREAD, new_obj_oop);
693 }
694
695 return JNIHandles::make_local(env, new_obj());
696 JVM_END
697
698 // java.io.File ///////////////////////////////////////////////////////////////
699
700 JVM_LEAF(char*, JVM_NativePath(char* path))
701 JVMWrapper("JVM_NativePath");
702 return os::native_path(path);
703 JVM_END
|
663 // Clear the header
664 new_obj_oop->init_mark();
665
666 // Store check (mark entire object and let gc sort it out)
667 BarrierSet* bs = Universe::heap()->barrier_set();
668 assert(bs->has_write_region_opt(), "Barrier set does not have write_region");
669 bs->write_region(MemRegion((HeapWord*)new_obj_oop, size));
670
671 Handle new_obj(THREAD, new_obj_oop);
672 // Special handling for MemberNames. Since they contain Method* metadata, they
673 // must be registered so that RedefineClasses can fix metadata contained in them.
674 if (java_lang_invoke_MemberName::is_instance(new_obj()) &&
675 java_lang_invoke_MemberName::is_method(new_obj())) {
676 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(new_obj());
677 // MemberName may be unresolved, so doesn't need registration until resolved.
678 if (method != NULL) {
679 methodHandle m(THREAD, method);
680 // This can safepoint and redefine method, so need both new_obj and method
681 // in a handle, for two different reasons. new_obj can move, method can be
682 // deleted if nothing is using it on the stack.
683 m->method_holder()->add_member_name(new_obj());
684 }
685 }
686
687 // Caution: this involves a java upcall, so the clone should be
688 // "gc-robust" by this stage.
689 if (klass->has_finalizer()) {
690 assert(obj->is_instance(), "should be instanceOop");
691 new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL);
692 new_obj = Handle(THREAD, new_obj_oop);
693 }
694
695 return JNIHandles::make_local(env, new_obj());
696 JVM_END
697
698 // java.io.File ///////////////////////////////////////////////////////////////
699
700 JVM_LEAF(char*, JVM_NativePath(char* path))
701 JVMWrapper("JVM_NativePath");
702 return os::native_path(path);
703 JVM_END
|