mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
7085404: JSR 292: VolatileCallSites should have push notification too
Reviewed-by: never, kvn
This commit is contained in:
parent
fcc2a86582
commit
db44acbeb4
7 changed files with 35 additions and 33 deletions
|
@ -302,6 +302,19 @@ UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject
|
|||
UnsafeWrapper("Unsafe_SetObjectVolatile");
|
||||
oop x = JNIHandles::resolve(x_h);
|
||||
oop p = JNIHandles::resolve(obj);
|
||||
// Catch VolatileCallSite.target stores (via
|
||||
// CallSite.setTargetVolatile) and check call site dependencies.
|
||||
if ((offset == java_lang_invoke_CallSite::target_offset_in_bytes()) && p->is_a(SystemDictionary::CallSite_klass())) {
|
||||
oop call_site = p;
|
||||
oop method_handle = x;
|
||||
assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be");
|
||||
assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be");
|
||||
{
|
||||
// Walk all nmethods depending on this call site.
|
||||
MutexLocker mu(Compile_lock, thread);
|
||||
Universe::flush_dependents_on(call_site, method_handle);
|
||||
}
|
||||
}
|
||||
void* addr = index_oop_from_field_offset_long(p, offset);
|
||||
OrderAccess::release();
|
||||
if (UseCompressedOops) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue