summaryrefslogtreecommitdiffstats
path: root/runtime/java_vm_ext.cc
diff options
context:
space:
mode:
authorHiroshi Yamauchi <yamauchi@google.com>2014-09-08 13:22:56 -0700
committerHiroshi Yamauchi <yamauchi@google.com>2014-09-09 14:19:23 -0700
commit8a74117cac720239a69e60e734c7044b433fad47 (patch)
tree88663982b24ac419886c432b22aebb1387c0039a /runtime/java_vm_ext.cc
parent9b2b927f573264c2f0d66b24ceeb361857a41ab3 (diff)
downloadart-8a74117cac720239a69e60e734c7044b433fad47.tar.gz
art-8a74117cac720239a69e60e734c7044b433fad47.tar.bz2
art-8a74117cac720239a69e60e734c7044b433fad47.zip
Address read barrier issue with cl/106467
And tidy/add a check. Bug: 12687968 Change-Id: If63dc0d9d0a0ce5f2eeb81734ff8f4307865f67d
Diffstat (limited to 'runtime/java_vm_ext.cc')
-rw-r--r--runtime/java_vm_ext.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc
index 424addb2a8..0ac5b88e80 100644
--- a/runtime/java_vm_ext.cc
+++ b/runtime/java_vm_ext.cc
@@ -760,6 +760,11 @@ void JavaVMExt::SweepJniWeakGlobals(IsMarkedCallback* callback, void* arg) {
for (mirror::Object** entry : weak_globals_) {
// Since this is called by the GC, we don't need a read barrier.
mirror::Object* obj = *entry;
+ if (obj == nullptr) {
+ // Need to skip null here to distinguish between null entries
+ // and cleared weak ref entries.
+ continue;
+ }
mirror::Object* new_obj = callback(obj, arg);
if (new_obj == nullptr) {
new_obj = Runtime::Current()->GetClearedJniWeakGlobal();