< prev index next >
src/hotspot/share/prims/unsafe.cpp
Print this page
*** 37,48 ****
#include "oops/fieldStreams.hpp"
#include "oops/objArrayOop.inline.hpp"
#include "oops/oop.inline.hpp"
#include "oops/typeArrayOop.inline.hpp"
#include "oops/valueArrayKlass.hpp"
- #include "oops/valueArrayOop.hpp"
#include "oops/valueArrayOop.inline.hpp"
#include "prims/unsafe.hpp"
#include "runtime/atomic.hpp"
#include "runtime/fieldDescriptor.inline.hpp"
#include "runtime/globals.hpp"
#include "runtime/handles.inline.hpp"
--- 37,48 ----
#include "oops/fieldStreams.hpp"
#include "oops/objArrayOop.inline.hpp"
#include "oops/oop.inline.hpp"
#include "oops/typeArrayOop.inline.hpp"
#include "oops/valueArrayKlass.hpp"
#include "oops/valueArrayOop.inline.hpp"
+ #include "oops/valueKlass.inline.hpp"
#include "prims/unsafe.hpp"
#include "runtime/atomic.hpp"
#include "runtime/fieldDescriptor.inline.hpp"
#include "runtime/globals.hpp"
#include "runtime/handles.inline.hpp"
*** 366,399 ****
ValueKlass* vk = ValueKlass::cast(k);
assert_and_log_unsafe_value_access(base, offset, vk);
Handle base_h(THREAD, base);
oop v = vk->allocate_instance(CHECK_NULL); // allocate instance
vk->initialize(CHECK_NULL); // If field is a default value, value class might not be initialized yet
! vk->value_store(((address)(oopDesc*)base_h()) + offset,
! vk->data_for_oop(v),
! true, true);
return JNIHandles::make_local(env, v);
} UNSAFE_END
UNSAFE_ENTRY(void, Unsafe_PutValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass vc, jobject value)) {
oop base = JNIHandles::resolve(obj);
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(vc));
ValueKlass* vk = ValueKlass::cast(k);
assert(!base->is_value() || base->mark().is_larval_state(), "must be an object instance or a larval value");
assert_and_log_unsafe_value_access(base, offset, vk);
oop v = JNIHandles::resolve(value);
! vk->value_store(vk->data_for_oop(v),
! ((address)(oopDesc*)base) + offset, true, true);
} UNSAFE_END
UNSAFE_ENTRY(jobject, Unsafe_MakePrivateBuffer(JNIEnv *env, jobject unsafe, jobject value)) {
oop v = JNIHandles::resolve_non_null(value);
assert(v->is_value(), "must be a value instance");
Handle vh(THREAD, v);
ValueKlass* vk = ValueKlass::cast(v->klass());
instanceOop new_value = vk->allocate_instance(CHECK_NULL);
! vk->value_store(vk->data_for_oop(vh()), vk->data_for_oop(new_value), true, false);
markWord mark = new_value->mark();
new_value->set_mark(mark.enter_larval_state());
return JNIHandles::make_local(env, new_value);
} UNSAFE_END
--- 366,396 ----
ValueKlass* vk = ValueKlass::cast(k);
assert_and_log_unsafe_value_access(base, offset, vk);
Handle base_h(THREAD, base);
oop v = vk->allocate_instance(CHECK_NULL); // allocate instance
vk->initialize(CHECK_NULL); // If field is a default value, value class might not be initialized yet
! vk->value_copy_payload_to_new_oop(((address)(oopDesc*)base_h()) + offset, v);
return JNIHandles::make_local(env, v);
} UNSAFE_END
UNSAFE_ENTRY(void, Unsafe_PutValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass vc, jobject value)) {
oop base = JNIHandles::resolve(obj);
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(vc));
ValueKlass* vk = ValueKlass::cast(k);
assert(!base->is_value() || base->mark().is_larval_state(), "must be an object instance or a larval value");
assert_and_log_unsafe_value_access(base, offset, vk);
oop v = JNIHandles::resolve(value);
! vk->value_copy_oop_to_payload(v, ((address)(oopDesc*)base) + offset);
} UNSAFE_END
UNSAFE_ENTRY(jobject, Unsafe_MakePrivateBuffer(JNIEnv *env, jobject unsafe, jobject value)) {
oop v = JNIHandles::resolve_non_null(value);
assert(v->is_value(), "must be a value instance");
Handle vh(THREAD, v);
ValueKlass* vk = ValueKlass::cast(v->klass());
instanceOop new_value = vk->allocate_instance(CHECK_NULL);
! vk->value_copy_oop_to_new_oop(vh(), new_value);
markWord mark = new_value->mark();
new_value->set_mark(mark.enter_larval_state());
return JNIHandles::make_local(env, new_value);
} UNSAFE_END
< prev index next >