diff options
| author | 2017-01-12 19:50:46 +0000 | |
|---|---|---|
| committer | 2017-01-12 19:50:47 +0000 | |
| commit | 29eabfa6c46215dab09a3a3a3362dce53d780eed (patch) | |
| tree | a0ffaee08c43ed90bfc5e48266ee6ad9247a7fd7 /runtime/java_vm_ext.cc | |
| parent | 9e68f5043323eaf4543ebf3b6f496145d8ae77a2 (diff) | |
| parent | f1c6f8742e2ac980c7259f4dc70b4326ecc245e1 (diff) | |
Merge "Don't need to block in AddWeakGlobalRef and MonitorList::Add under CC."
Diffstat (limited to 'runtime/java_vm_ext.cc')
| -rw-r--r-- | runtime/java_vm_ext.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc index f80c43d80c..e0f28adc4f 100644 --- a/runtime/java_vm_ext.cc +++ b/runtime/java_vm_ext.cc @@ -566,7 +566,10 @@ jweak JavaVMExt::AddWeakGlobalRef(Thread* self, ObjPtr<mirror::Object> obj) { return nullptr; } MutexLock mu(self, *Locks::jni_weak_globals_lock_); - while (UNLIKELY(!MayAccessWeakGlobals(self))) { + // CMS needs this to block for concurrent reference processing because an object allocated during + // the GC won't be marked and concurrent reference processing would incorrectly clear the JNI weak + // ref. But CC (kUseReadBarrier == true) doesn't because of the to-space invariant. + while (!kUseReadBarrier && UNLIKELY(!MayAccessWeakGlobals(self))) { // Check and run the empty checkpoint before blocking so the empty checkpoint will work in the // presence of threads blocking for weak ref access. self->CheckEmptyCheckpoint(); |